Python - 向列表中的项添加信息,从而创建元组列表

时间:2016-07-08 15:33:36

标签: python list tuples

我有一个清单:

list1 = [1,2,3]

我通过一些任意函数查找列表中每个项目的信息,并想要添加结果,以便列表变为:

list1 = [(1,a),(2,b),(3,x)]

如何在Python3中最好地完成此任务?

for item in list1:
    newinfo = some_arbitrary_function(item)
    item = (item, newinfo)

似乎不起作用。

4 个答案:

答案 0 :(得分:5)

您需要列表理解:

lst = [1,2,3]
result = [(item, function(item)) for item in lst]

使用list作为名称不是一个好主意,您将隐藏原始的list内置内容,使其在代码中稍后无法访问。

如果您想保留对原始列表的引用:

lst[:] = [(item, function(item)) for item in lst]

答案 1 :(得分:3)

无法为列表项指定迭代变量(在您的情况下为item)。事实上,与item的作业相比,变量=没有什么特别之处。如果该操作是为了就地,你应该

for i, item in enumerate(list):
    list[i] = (item, func(item))

此外,您不应将列表命名为list,因为它会隐藏内置类型list

答案 2 :(得分:1)

看起来你只想更改列表中的值,从单个元素转换为包含原始值的元组和对该值进行一些查找的结果。这应该做你想要的。

zzz = [1,2,3]
i = 0
for num in zzz:
    zzz[i] = (num, somefunc(num))
    i += 1

运行此

zzz = [1,2,3]
i = 0
for num in zzz:
    zzz[i] = (num, 8)
    i += 1        

给出结果zzz = [(1,8),(2,8),(3,8)]

答案 3 :(得分:0)

如果您有list1 = [1,2,3]list2 = [x,y,z]zip(list1, list2)会为您提供您正在寻找的内容。您需要使用函数迭代第一个列表以查找x, y, z并将其放入列表中。

zip(list1, list2)

  

[(1,x),(2,y),(3,z)]