请告诉我,它是如何工作的?为什么每次迭代结果都写入数组?
list_of_strings = [a.rstrip('\n') for a in list_of_strings]
此列表理解:
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,请学习并使用它。
这需要一个字符串列表(存储在变量中list_of_strings
),遍历它,每次都将每个字符串临时分配给变量a
,并\n
从每个字符串中删除字符。结果是分配回同一变量的字符串列表。
这是使用List Comprehension。通常,大多数涉及 append() 的 for 循环和列表操作都可以转换为等效的列表推导。这是一个简单的例子来证明这一点:
new_list = []
for i in range(10):
new_list.append(i**2)
可以简单地重写为
new_list = [i**2 for i in range(10)]
for
您可能会发现获取列表理解并用-loop重写它以测试您的理解是有启发性的(两者都应该产生相同的结果)。
在大多数情况下,列表推导比等效的for
-loop 更快,并且显然是一种更紧凑的算法表达方式。你也可以有嵌套的列表理解(就像你可以有嵌套for
的循环一样),但是它们很快就会变得难以理解:)
此外,虽然上面的代码中没有显示,但您可以在列表理解中过滤值,即根据它们是否满足某些条件,将它们包含(或不包含)在结果列表中。
顺便说一句,Python 也提供了类似的集合推导和生成器表达式。所有这些都值得学习。
请阅读An Introduction to List Comprehensions in Python以更好地理解 Python 的列表理解语法。
每个迭代结果都不会写入列表,而是在右侧创建一个全新的列表,然后将其分配给 = 符号左侧的变量 list_of_strings。
这是 Python 的一个特性,称为列表推导。基本上,您在括号中写的内容是“执行此循环然后创建结果列表”的简写。
列表推导具有以下通用形式
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)
或者
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]
List Comprehensions 可以像函数一样制作出色的过滤器,并且通常与硬 c 编码的原语(如 cpython 中的 map 和 filter)一样快。