这个“[... for .. in ..]”如何在Python中运行?

时间:2012-08-09 01:00:41

标签: python list

请告诉我,它是如何运作的?为什么每个迭代结果写入数组?

list_of_strings = [a.rstrip('\n') for a in list_of_strings]

6 个答案:

答案 0 :(得分:5)

list comprehension

list_of_strings = [a.rstrip('\n') for a in list_of_strings]

等同于这个更通用的代码:

temp_list=[]
for a in list_of_strings:
   temp_list.append(a.rstrip('\n'))

list_of_strings=temp_list

在大多数情况下,列表理解更快更容易阅读。学习它并使用它,如果你想编写非平凡的Python。

答案 1 :(得分:4)

这将获取一个字符串列表(存储在变量list_of_strings中),每次遍历时将每个字符串临时分配给变量a,并从每个字符串中删除\n个字符。结果是一个 list 字符串,它们被分配回同一个变量。

这是使用List Comprehension。通常,大多数for循环和list operations involving append()可以转换为等效的列表推导。这是一个证明这一点的简单例子:

   new_list = []
   for i in range(10):
       new_list.append(i**2)

可以简单地重写为

   new_list = [i**2 for i in range(10)]

您可能会发现使用列表理解并使用for循环重写它来测试您的理解(两者都应该产生相同的结果)是有益的。

在大多数情况下,列表理解比等效的for - 循环更快,显然是表达算法的更紧凑的方式。您也可以使用嵌套列表推导(就像您可以嵌套for - 循环),但它们很快就会变得难以理解:)

此外,虽然未在上面的代码中显示,但您可以过滤列表推导中的值,即在结果列表中包含它们(或不包括它们),具体取决于它们是否符合某些条件。

另外,Python还提供了类似的集合理解和生成器表达式。非常值得了解所有这些。

答案 2 :(得分:1)

请阅读An Introduction to List Comprehensions in Python以更好地理解Python的列表推导语法。

答案 3 :(得分:1)

每个迭代结果都不会写入列表,而是在右侧创建一个全新的列表,然后分配给=符号左侧的变量list_of_strings。

答案 4 :(得分:0)

这是Python的一个名为list comprehensions的特性。基本上,您在括号中写的是'执行此循环然后创建结果列表'的简写。

答案 5 :(得分:0)

列表理解具有以下通用形式

result = [ x for x in list]

此列表理解的等效程序代码是:

for x in list:
    x


创建有用列表推导的下一步是调用或将函数应用于括号后的第一个x。

result = [function(x) for x in list]
result = [x.function(arg) for x in list]

list_of_strings = [a.rstrip('\n') for a in list_of_strings]

result = [x*2 for x in list_of_numbers]

此列表理解的等效程序代码是:

for x in list:
    function(x)

OR

for x in list:
    x.function()


要为列表推导添加更多功能,您可以添加以下条件:

result = [function(x) for x in list if x == True]

list_of_strings = [a.rstrip('\n') for a in list_of_strings if '\n' in a]

result = [x*2 for x in [1,2,3,4,5,6,7] if x > 3]

列表理解可以很好地过滤类似函数,并且通常与cpython中的映射和过滤器等硬编码基元一样快。