[英]How does this “[.. for .. in ..]” work in Python?
请告诉我,它是如何工作的? 为什么每个迭代结果写入数组?
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
字符。 结果是分配回同一变量的字符串列表 。
这是使用列表理解 。 通常, 涉及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
并且显然是表达算法的更紧凑的方式。 您也可以使用嵌套列表推导(就像您可以嵌套for
-loops一样),但它们很快就会变得难以理解:)
此外,虽然上面的代码中没有显示,但您可以过滤列表推导中的值,即在结果列表中包含它们(或不包括它们),具体取决于它们是否符合某些条件。
另外,Python还提供了类似的集合理解和生成器表达式。 所有这些都值得学习。
请阅读Python中的列表推导简介,以便更好地理解Python的列表推导语法。
每个迭代结果都不会写入列表,而是在右侧创建一个全新的列表,然后分配给=符号左侧的变量list_of_strings。
这是Python的一个名为list comprehensions的特性。 基本上,您在括号中写的是'执行此循环然后创建结果列表'的简写。
列表理解具有以下通用形式
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]
列表理解可以很好地过滤类似函数,并且通常与cpython中的map和filter等硬编码基元一样快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.