【问题标题】:How can I get index from an element in a mulitidimensional list?如何从多维列表中的元素获取索引?
【发布时间】:2020-07-19 12:37:53
【问题描述】:

这是我想要做的:

board = [[0, 1, 2, 3] , [4, 5, 6, 7] , [8, 9, 10, 11] , [12, 13, 14, 15,]].index("8")
print(board)

我得到错误:

ValueError '8' is not in the list

如何从这个元素中获取索引?

【问题讨论】:

  • 您的预期输出是什么? 8 还是 2?
  • 欢迎来到 SO 并感谢您的帖子!不幸的是,正如@Austin 所说,您的帖子缺乏许可。你在解决什么问题?你期望什么行为?随意编辑您的帖子以添加此信息。此外,在 SO 上发帖的一些技巧:'>' 通常用于表示引号;当你插入一个代码 sn-p 时,如果它占用更多的行会更容易阅读,但读者不必滚动它的宽度。 Python 允许您将列表(以及我能想到的所有其他集合)写成几行。我希望你留下来提出更多有趣的问题!
  • 以下是一些关于格式化代码的额外提示:meta.stackexchange.com/questions/22186/….

标签: python list multidimensional-array indexing


【解决方案1】:

可以迭代并返回索引值:

next((i for i, x in enumerate(board) if n in x), 'not found')

board = [[ 0 , 1 , 2 , 3 ] , [ 4 , 5 , 6 , 7 ] , [ 8 , 9 , 10 , 11 ] , [ 12 , 13 , 14 , 15 , ]]

n = 8
print(next((i for i, x in enumerate(board) if n in x), 'not found'))

打印出来:

2

如果您想要该值的所有索引,请切换到列表理解:

[i for i, x in enumerate(board) if n in x]

【讨论】:

    【解决方案2】:

    我认为没有内置的方法可以做到这一点。我会用 numpy 来做:

    import numpy as np
    board = [[ 0 , 1 , 2 , 3 ] , [ 4 , 5 , 6 , 7 ] , [ 8 , 9 , 10 , 11 ] , [ 
    12 , 13 , 14 , 15 , ]]
    b=np.asarray(board)
    print(np.argwhere(b==8))
    

    结果: array([[2, 0]])

    【讨论】:

      【解决方案3】:

      python 中的index 所做的是找到在您的情况下都是列表的元素匹配,并且您正在尝试匹配int

      您可以使用numpy获取位置

      import numpy as np
      board = [[ 0 , 1 , 2 , 3 ] , [ 4 , 5 , 6 , 7 ] , [ 8 , 9 , 10 , 11 ] , [ 12 , 13 , 14 , 15 ]]
      np.where(np.array(board) == 8)
      
      (array([2]), array([0]))
      

      基本上是board[2][0]

      【讨论】:

        【解决方案4】:

        这假设一个元素只出现一次。

        board = [[ 0 , 1 , 2 , 3 ] , [ 4 , 5 , 6 , 7 ] , [ 8 , 9 , 10 , 11 ] , [ 12 , 13 , 14 , 15 ]]
        
        var = [ele for ele in board if 8 in ele][0]
        
        # check if element is not present in the list
        if len(var) == 0:
            print('-1')
        
        else:
            print('index: (', board.index(var), var.index(8), ')')
        

        输出:

        index: ( 2 0 )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-27
          • 1970-01-01
          • 2011-05-05
          相关资源
          最近更新 更多