【问题标题】:list comprehension replace for loop in 2D matrix列表理解替换二维矩阵中的循环
【发布时间】:2014-10-10 07:57:15
【问题描述】:

我尝试使用列表推导来替换 for 循环。

原文件是

2 3 4 5 6 3
1 2 2 4 5 5
1 2 2 2 2 4

for循环

line_number = 0
for line in file:
    line_data = line.split()
    Cordi[line_number, :5] = line_data 
    line_number += 1

输出是

[[2 3 4 5 6 3]
 [1 2 2 4 5 5]
 [1 2 2 2 2 4]]

如果改用列表推导,我能想到的是(我必须将数据类型更改为 int,以便可以在程序的后面部分绘制)

Cordi1= [int(x) for x in line.split() for line in data]

但输出是

[1, 1, 1]

line.split() for line in data实际上是一个列表,如果我尝试

Cordi1 = [int(x) for x in name of the list]

有效,为什么会这样?

【问题讨论】:

  • 你可以生成一个带有列表解析的列表,但Cordi 是一个numpy数组。
  • @MartijnPieters,啊,所以我无法生成具有列表理解的二维数组?
  • 之后您可以将嵌套列表转换为 2D 数组,但从这些数据生成 numpy 数组可能有更好的选择。
  • 请参阅how to convert 2d list to 2d numpy array? 了解转换选项。
  • @MartijnPieters 谢谢,啊,但实际上无论是嵌套二维列表还是 numpy 二维列表,它们都可以很好地绘制。但在未来的应用中,这可能会导致问题。还是谢谢你!

标签: python int output list-comprehension


【解决方案1】:

你已经交换了循环的顺序;它们的顺序应该与它们嵌套的方式相同,从左到右:

[int(x) for line in data for x in line.split()]

这首先循环data,然后对于每个line 迭代,迭代line.split() 以产生x。然后,您可以从中生成一个 flat 整数列表。

但是,由于您正在尝试构建列表列表,因此您需要将列表推导式嵌套在另一个列表推导式中:

Cordi1 = [[int(i) for i in line.split()] for line in data]

演示:

>>> data = '''\
... 2 3 4 5 6 3
... 1 2 2 4 5 5
... 1 2 2 2 2 4
... '''.splitlines()
>>> [int(x) for line in data for x in line.split()]
[2, 3, 4, 5, 6, 3, 1, 2, 2, 4, 5, 5, 1, 2, 2, 2, 2, 4]
>>> [[int(i) for i in line.split()] for line in data]
[[2, 3, 4, 5, 6, 3], [1, 2, 2, 4, 5, 5], [1, 2, 2, 2, 2, 4]]

如果你想从中得到一个多维 numpy 数组,你可以将上面的内容直接转换为数组,或者从数据中创建一个数组,然后重新整形:

>>> import numpy as np
>>> np.array([[int(i) for i in line.split()] for line in data])
array([[2, 3, 4, 5, 6, 3],
       [1, 2, 2, 4, 5, 5],
       [1, 2, 2, 2, 2, 4]])
>>> np.array([int(i) for line in data for i in line.split()]).reshape((3, 6))
array([[2, 3, 4, 5, 6, 3],
       [1, 2, 2, 4, 5, 5],
       [1, 2, 2, 2, 2, 4]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多