繁体   English   中英

在 Python 中将列表推导式转换为 For 循环

[英]Converting List Comprehensions to For Loops in Python

我了解列表推导式的重要性,但不了解它们的内部工作原理,因此无法用更简单的术语(例如 for 循环)来理解它们。 例如,我如何将其更改为 for 循环:

li = [row[index] for row in outer_list]

在这个例子中,我有一个列表列表,为了我的目的,我有一个矩阵,称为outer_list ,它是一个列表列表。 索引值是外部迭代所在的列号,从 0 到某个数字 n。 上面的列表推导式返回矩阵中索引的第 ' 列,并将其作为列表分配给li 如何创建以这种方式创建列表的 for 循环?

这只是表达list一种更短的方式。

li = [row[index] for row in outer_list]

相当于:

li = []
for row in outer_list:
    li.append(row[index])

一旦习惯了语法,它就会成为创建list (和其他可迭代对象)的一种整洁方式。

题:

我怎么能把它改成 for 循环?

li = [row[index] for row in outer_list]

回答:

li = []
for row in outer_list:
   li.append(row[index])

假设外部迭代是针对索引的,这段代码可以有效地重写为:

for row in outer_list:
    li.append(row[index])

在这里,您正在对outer_list内的列表进行迭代。 因此,第一次迭代会将outer_list的第一个列表添加到li ,然后附加第二个列表,依此类推。

您的问题似乎暗示此代码段已经在 for 循环内,如下所示:

outer_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for index in xrange(3):
    li = [row[index] for row in outer_list]
    print li

这将输出:

[1, 4, 7]
[2, 5, 8]
[3, 6, 9]

您可以通过在外循环内嵌套一个内循环来将其转换为仅使用传统的for循环:

outer_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for index in xrange(3):
    li = []                    # initial empty list
    for row in outer_list:     # our inner loop
        li.append(row[index])  # Build the list "li" iteratively
    print li

如果您将此嵌套列表视为矩阵,那么您所描述的实际上是对矩阵进行转置。 你也可以完全通过列表推导来做到这一点:

outer_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

transpose = [[row[i] for row in outer_list] for i in range(len(outer_list[0]))]

print transpose

产生:

[[1, 4, 7],
[2, 5, 8],
[3, 6, 9]]

如图Python的官方教程这里

出于完整性的考虑,我已经包含了嵌套列表理解示例,但明智的说法是:使用嵌套列表理解通常会使代码更难理解,而不是更多。 仅仅因为你可以并不意味着你应该。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM