【问题标题】:Finding the index of an element in nested lists in python在python的嵌套列表中查找元素的索引
【发布时间】:2016-02-29 12:58:17
【问题描述】:

我正在尝试在 python 的嵌套列表中获取元素的索引 - 例如[[a, b, c], [d, e, f], [g,h]](并非所有列表的大小都相同)。 我试过使用

strand_value= [x[0] for x in np.where(min_value_of_non_empty_strands=="a")]

但这只是返回一个空列表,即使元素存在。知道我做错了什么吗?

【问题讨论】:

  • 预期输出是什么?
  • 在这种情况下,0,然后我会尝试使用 x[1] 再次获得 0 - 我想知道它在哪个列表中以及在列表中的哪个位置
  • 不应该是0 0,因为你在找a
  • 我正在尝试查找任何给定字符串的索引,我不知道它的位置或它在哪个列表中 - 如果我能立即获得 0 0,我会发现这非常有帮助
  • 如果你有一个字符串列表,那么它比一个字符串列表更容易解决。

标签: python nested-lists


【解决方案1】:
def find_in_list_of_list(mylist, char):
    for sub_list in mylist:
        if char in sub_list:
            return (mylist.index(sub_list), sub_list.index(char))
    raise ValueError("'{char}' is not in list".format(char = char))

example_list = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]

find_in_list_of_list(example_list, 'b')
(0, 1)

【讨论】:

  • 这是 O(N^2) 并且如果 mylist 很长会很慢。
【解决方案2】:

您可以使用列表推导和枚举来做到这一点

代码:

lst=[["a", "b", "c"], ["d", "e", "f"], ["g","h"]]
check="a"
print ["{} {}".format(index1,index2) for index1,value1 in enumerate(lst) for index2,value2 in enumerate(value1) if value2==check]

输出:

['0 0']

步骤:

  • 我已经枚举了List of List,得到了它的索引和列表
  • 然后我枚举了获取的列表并检查它是否与check变量匹配,如果匹配则将其写入列表

这给出了所有可能的输出

即)

代码2:

lst=[["a", "b", "c","a"], ["d", "e", "f"], ["g","h"]]
check="a"
print ["{} {}".format(index1,index2) for index1,value1 in enumerate(lst) for index2,value2 in enumerate(value1) if value2==check]

给予:

['0 0', '0 3']

注意事项:

  • 如果需要,您可以轻松地将其转换为列表列表而不是字符串

【讨论】:

    【解决方案3】:

    假设你的列表是这样的:

    lst = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g','h']]
    list_no = 0
    pos = 0
    for x in range(0,len(lst)):
        try:
            pos = lst[x].index('e')
            break
        except:
            pass
    
    list_no = x
    

    list_no 给出列表编号,pos 给出该列表中的位置

    【讨论】:

      【解决方案4】:

      这就够了吗?

      array = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]
      for subarray in array:
          if 'a' in subarray:
              print(array.index(subarray), '-', subarray.index('a'))
      

      这将返回 0 - 0。第一个零是数组内子数组的索引,最后一个零是子数组内的“a”索引。

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 2019-11-11
        相关资源
        最近更新 更多