请告诉我,它是如何运作的?为什么每个迭代结果写入数组?
list_of_strings = [a.rstrip('\n') for a in list_of_strings]
答案 0 :(得分:5)
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中的映射和过滤器等硬编码基元一样快。