【问题标题】:I have a list with sublists. Is there a way of searching for a specific elements position and return the index number of that specific sublist我有一个带有子列表的列表。有没有办法搜索特定元素位置并返回该特定子列表的索引号
【发布时间】:2020-11-29 21:53:25
【问题描述】:
sublist = [[32,999,15,329,679],[1738,100,55,1800,1469],["bruges","manchester","bristol","edinburgh","barcelona"]["Vienna","Stockholm","Berlin",Prague,"Dublin"]]

这些子列表故意混合了字符串和整数,例如,但还有 6 个子列表。有没有办法搜索例如“维也纳”并返回 4,因为“维也纳”在第四个子列表中。

非常感谢

【问题讨论】:

标签: python list function loops


【解决方案1】:

如果你只有一层,你可以循环遍历这个列表并检查元素是否在这个列表中,使用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 个元素。元素“鹦鹉”在列表 4 中,在列表 1 中,是第 1 个元素。

【讨论】:

    【解决方案2】:

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

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

    在您的特定情况下,3 被返回。如果没有找到合适的子列表(即没有子列表包含 'Vienna'),则返回 None

    【讨论】:

    • 谢谢你,这是一个很大的帮助,但是我犯了一个错误,忘记了索引从零开始,使得维也纳返回 3,有没有办法编辑你的结果变量来返回 3除了结果减去 1。干杯
    • @HusslinHustla 已修复,现在代码正确返回 3 作为结果
    【解决方案3】:

    您可以使用 enumerate 函数优雅地解决您的问题。但是请记住,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2020-08-15
      • 2022-10-14
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多