我的实际例子更为复杂,所以我将这个概念简化为一个简单的例子:
l = [1,2,3,4,5,6,7,8]
for number in l:
calc = number*10
print calc
对于我的循环的每次迭代,我最终得到一个变量(calc
)我想用来填充一个新列表。我的实际过程涉及的不仅仅是将值乘以10
,因此我希望能够通过此方法设置新列表中的每个值。新代码可能如下所示:
l = [1,2,3,4,5,6,7,8]
for number in l:
calc = number*10
set calc as x'th entry in a new list called l2 (x = iteration cycle)
print l2
然后它将打印新列表:[10,20,30,40,...]
答案 0 :(得分:6)
有几种选择......
如果足够短,请使用list comprehension:
new_list = [number * 10 for number in old_list]
map()
你也可以使用map()
,如果该函数之前存在(或者你将使用lambda
):
def my_func(value):
return value * 10
new_list = map(my_func, old_list)
请注意,在Python 3.x中map()
不返回列表(因此您需要执行以下操作:new_list = list(map(my_func, old_list))
)。
for ... in
循环或者你可以使用简单的循环 - 它仍然有效并且Pythonic:
new_list = []
for item in old_list:
new_list.append(item * 10)
有时,如果你有很多处理(正如你所说的那样),你想要在需要时懒洋洋地执行它,或者只是结果可能太大,你可能希望使用生成器。生成器记住生成下一个元素的方法并忘记之前发生的任何事情(我正在简化),因此您可以迭代它们一次(但您也可以显式创建例如存储所有结果的列表。)
在您的情况下,如果这仅用于打印,您可以使用:
def process_list(old_list):
for item in old_list:
new_item = ... # lots of processing - item into new_item
yield new_item
然后打印出来:
for new_item in process_list(old_list):
print(new_item)
有关生成器的更多信息,请参阅Python的wiki:http://wiki.python.org/moin/Generators
但如果您的问题更多是关于如何检索迭代次数,请查看enumerate()
:
for index, item in enumerate(old_list):
print('Item at index %r is %r' % (index, item))
答案 1 :(得分:4)
这是如何在不直接跳到列表推导的情况下完成的。使用l
作为变量名称并不是一个好主意,因为它在某些字体中与1
相同,所以我更改了它(虽然l1
并不是更好:))
l1 = [1,2,3,4,5,6,7,8]
l2 = []
for number in l1:
calc = number*10
print calc
l2.append(calc)
列表推导确实提供了一种更简洁的方式来编写这种模式
l2 = [ number*10 for number in l1 ]
答案 2 :(得分:2)
>>> l = [1,2,3,4,5,6,7,8]
>>> l2 = [ item*10 for item in l]
>>> l2
[10, 20, 30, 40, 50, 60, 70, 80]
大致相当于,但是列表理解比正常的循环更快:
>>> l2 = []
>>> for number in l:
... calc = number * 10 #do some more calculations
... l2.append(calc) #appends the final calculated value at the end of l2
...
>>> l2
[10, 20, 30, 40, 50, 60, 70, 80]
您还可以为正在进行的所有计算创建一个函数,然后在列表推导中调用该函数:
def solve(x):
#do some calculations here
return calculated_value
l2 = [ solve(item) for item in l]
答案 3 :(得分:0)
所以我相信你想将一个函数应用于列表的每个元素。
您是否尝试过列表理解?
[num*10 for num in l]
应该为您提供这个简单示例所需的内容。
当然,如果你有一些更复杂的操作,你可以使用你之前定义的函数,即:
def explode(n):
return (n + (n * n) - (3 * n))
[explode(num) for num in l]
答案 4 :(得分:0)
您问题的简单答案是将calc
附加到列表中,如下所示:
l = [1,2,3,4,5,6,7,8]
your_list = []
for number in l:
calc = number*10
your_list.append(calc)
要访问列表中的变量,请使用切片语法。
即列表中的第二个元素为your_list[1]
,第五个your_list[4]
。
我怀疑你需要在某个时候清空列表。要通过切片执行此操作,请使用calc[:] = []
答案 5 :(得分:0)
其他人都给了你正确的答案:使用列表理解。
我会给你一个正确的答案:使用带有lambda或函数的map。
当'function'非常简单时,你可以使用lambda:
print map(lambda x: x*10,[1,2,3,4,5,6,7,8])
# [10, 20, 30, 40, 50, 60, 70, 80]
map使用的函数可以是任意复杂的,然后使用函数更容易:
def more_complex(x):
# can be as complex as a function can be
# for now -- *10
return x*10
print map(more_complex,[1,2,3,4,5,6,7,8])
但这也适用于理解:
l2=[more_complex(x) for x in [1,2,3,4,5,6,7,8]]
只是为了让你熟悉地图与列表理解的形式。
答案 6 :(得分:0)
生成列表的循环
KOT = []
l = [1,2,3,4,5,6,7,8]
for number in l:
calc = number*10
KOT.append(calc)
你得到KOT列表
KOT = [10, 20, 30, 40, 50, 60, 70, 80]