【问题标题】:Python List IndexesPython 列表索引
【发布时间】:2012-03-28 19:41:00
【问题描述】:

我有一个双重列表,我想知道获取数组中零的索引的最佳方法是什么

board =[[1,2,0],
    [2,1,2],
    [1,1,0]]

for boxes in board:
    if 0 in boxes:
        print boxes

喜欢这样,但我想要返回 [0,2] [2,2]

【问题讨论】:

  • 子列表中有多个0怎么办?
  • 如果board是一个NumPy数组,你可以使用zip(*numpy.where(a == 0))
  • @IgnacioVazquez-Abrams 这有关系吗?我不确定,但我认为他总是打印整个boxes...所以我认为也可能有 3 个零,但它仍然可以工作。

标签: python list for-loop


【解决方案1】:

您的问题非常模糊(内部列表中的多个零如何),如果您正在寻找其他内容,请随时发表评论:

zeroes = []
for x, box in enumerate(board):
    if 0 in box:
        zeroes.append((x, box.index(0)))
print zeroes

根据你给定的列表,这会打印出来

[(0, 2), (2, 2)]

更短、更 Python 的版本将使用这样的列表推导:

zeroes = [(x, box.index(0)) for x, box in enumerate(board) if 0 in box]

【讨论】:

  • 我不知道枚举函数会派上用场。有没有办法将 for if 循环压缩成一行?
  • @GeneralZero:这可以写成zeroes = [(x, box.index(0)) for x, box in enumerate(box) if 0 in box]一行。请注意,此代码(以及上述答案中的代码)每行最多包含一个零 - 不确定这是否是您想要的。
  • @SvenMarnach 感谢您指出这一点。事实上,我确实需要每行不止一个
【解决方案2】:

您可以使用列表推导:

[(i, j) for i in range(3) for j in range(3) if board[i][j] == 0]

这将在每行包含多个零(如果存在)。

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 2018-11-13
    • 1970-01-01
    • 2013-11-11
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多