3

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

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

6 回答 6

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,请学习并使用它。

于 2012-08-09T01:05:37.803 回答
4

这需要一个字符串列表(存储在变量中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 也提供了类似的集合推导和生成器表达式。所有这些都值得学习。

于 2012-08-09T01:02:39.777 回答
1

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

于 2012-08-09T01:02:30.000 回答
1

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

于 2012-08-09T01:06:24.557 回答
0

这是 Python 的一个特性,称为列表推导。基本上,您在括号中写的内容是“执行此循环然后创建结果列表”的简写。

于 2012-08-09T01:02:43.543 回答
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)

或者

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)一样快。

于 2012-08-09T02:18:23.977 回答