我有一个带有子列表的列表。有没有一种方法可以搜索特定元素的位置并返回该特定子列表的索引号

时间:2020-08-10 09:40:51

标签: python list function loops

sublist = [[32,999,15,329,679],[1738,100,55,1800,1469],["bruges","manchester","bristol","edinburgh","barcelona"]["Vienna","Stockholm","Berlin",Prague,"Dublin"]]

例如,这些子列表故意将字符串和整数混合在一起,但又有6个子列表。有没有一种方法可以搜索“ Vienna”并返回第4个子列表中的“ Vienna”中的4。

非常感谢

3 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案:

result = next((i for i, lst in enumerate(sublist) if 'Vienna' in lst), None)

在特定情况下,返回3。如果找不到合适的子列表(即,没有子列表包含“维也纳”),则返回None

答案 1 :(得分:0)

如果只有一个级别,则可以使用in关键字循环浏览此列表并检查元素是否在此列表中。

但是,如果您嵌套了具有多个级别的子列表,则可能要使用递归函数来扫描所有列表。下面的函数finder()会扫描所有嵌套列表,并返回首次遇到该元素的列表的索引:

sublist = [[32,999,15,329,679],
           [1738,100,55,1800,1469],
           ["bruges","manchester","bristol","edinburgh","barcelona"],
           ["Vienna","Stockholm","Berlin","Prague","Dublin"],
           ["Dog",["Cat","Parrot"]]]

def finder(nested,element):
    for i in range(len(nested)):
        if type(nested[i])==list:
            f = finder(nested[i],element)
            if type(f)==list:
                return [i]+f
        elif nested[i]==element:
            return [i]

print(finder(sublist,"Vienna"))
print(finder(sublist,"Parrot"))


#Output:
#[3, 0]
#[4, 1, 1]

输出表示“维也纳”位于列表3中的第0个元素。元素“ Parrot”在列表1的列表4中,即第1个元素。

答案 2 :(得分:0)

您可以使用枚举功能优雅地解决您的问题。但是,请记住,Python对数组使用基于0的索引,因此,如果要为“第四子列表”返回4,则需要添加1。

def find(nest, elem):
  for idx, lst in enumerate(nest):
      if elem in list:
          return idx

sublist = [
  [32,999,15,329,679],
  [1738,100,55,1800,1469],
  ["bruges","manchester","bristol","edinburgh","barcelona"],
  ["Vienna","Stockholm","Berlin","Prague","Dublin"]]
print(find(sublist, "Vienna"))

要返回4:

def find(nest, elem):
  for idx, lst in enumerate(nest):
      if elem in list:
          return idx + 1