我有一个清单:
list1 = [1,2,3]
我通过一些任意函数查找列表中每个项目的信息,并想要添加结果,以便列表变为:
list1 = [(1,a),(2,b),(3,x)]
如何在Python3中最好地完成此任务?
for item in list1:
newinfo = some_arbitrary_function(item)
item = (item, newinfo)
似乎不起作用。
答案 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)]