【问题标题】:Iterate Across Columns in a List of Lists in Python在 Python 中遍历列表列表中的列
【发布时间】:2016-07-16 19:50:25
【问题描述】:

当我尝试跨行中的列进行迭代时,该列在嵌套循环中没有变化:

i_rows = 4
i_cols = 3
matrix = [[0 for c in xrange(i_cols)] for r in xrange(i_rows)]

for row, r in enumerate(matrix):
    for col, c in enumerate(r):
        r[c] = 1

print matrix

观察到的输出

[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]

预期输出

[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]

我尝试了不同的表达方式,例如 xrange()len(),我正在考虑切换到 numpy。我有点惊讶的是,Python 中的二维数组并没有我对这门语言的第一印象那么直观。

目标是一个具有不同整数值的二维数组,稍后我需要对其进行解析以表示屏幕上的 2D 图形。

如何遍历列表列表中的列?

【问题讨论】:

    标签: python list python-2.7 enumerate


    【解决方案1】:

    您只需将值分配给col,而不是c

    for row, r in enumerate(matrix):
        for col, c in enumerate(r):
            r[col] = 1               # Note `col`, not `c`
    

    因为enumerate 返回的第一个值将是索引,而第二个值将是实际值本身。

    【讨论】:

    • 这行得通!如此接近...我试过row[col]但没有成功。
    • @noumenal 是的,同样的事情 :-) 第一个值是索引。所以row[col] 尝试下标一个数字。这就是为什么您会收到错误消息。但是,尽量使用 List Comprehension。
    • 我一直在寻找这方面的文档,但不知道这个概念叫什么。它看起来非常灵活和 Pythonic。
    • @noumenal 你的意思是你在寻找列表理解?
    • @noumenal LC 用于仅基于当前信息创建新列表。如果您需要过去的信息,您可以使用普通循环本身更好地编写它。确保代码对未来的您来说是可读且易于理解的;-)
    猜你喜欢
    • 2016-08-27
    • 2011-09-14
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多