我有一个列表:
list1 = [1,2,3]
我正在通过某个任意函数查询每个列表中的项目信息,并希望添加结果以使列表变为:
list1 = [(1,a),(2,b),(3,x)]
如何在Python3中最好地实现这一点?
for item in list1:
newinfo = some_arbitrary_function(item)
item = (item, newinfo)
看起来无法工作。
我有一个列表:
list1 = [1,2,3]
list1 = [(1,a),(2,b),(3,x)]
for item in list1:
newinfo = some_arbitrary_function(item)
item = (item, newinfo)
看起来无法工作。
你需要使用列表推导式:
lst = [1,2,3]
result = [(item, function(item)) for item in lst]
将 list
作为名称并不是一个好主意,这会遮盖掉原始的内置 list
,使得后来在代码中无法访问。
如果您想保留对原始列表的引用:
lst[:] = [(item, function(item)) for item in lst]
[(1, a), (2, b)...]
,这正是您在@Trees4theForest中提出的要求。 - joel goldstick无法使用迭代变量(您的情况下为item
)分配列表项。实际上,与使用=
进行赋值相比,变量item
并没有什么特殊之处。如果操作旨在就地进行,则应执行以下操作:
for i, item in enumerate(list):
list[i] = (item, func(item))
list
,因为这会隐藏内置类型list
。看起来你只是想改变列表中的值,使其从单个值变成一个元组,其中包含原始值和对该值进行查找后得到的结果。这应该可以满足你的需求。
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)]
list1 = [1,2,3]
和 list2 = [x,y,z]
,zip(list1, list2)
将会给你你所需要的。你需要使用函数迭代第一个列表来找到 x, y, z
并将它们放入一个列表中。
zip(list1, list2)
[(1, x), (2, y), (3, z)]
list2 = [function(item) for item in list1]
zip(list1, list2)
list2 = [function(item) for item in list1]
zip(list1, list2)
- Peter Wang