【问题标题】:Python Search Nested ListsPython 搜索嵌套列表
【发布时间】:2016-03-11 17:22:03
【问题描述】:

如果我有一个嵌套列表的列表,那么在特定索引处搜索包含特定变量的子列表的最简单方法是什么?例如,如果我有一个如下所示的列表;

mylist = ['aa',1,2,['bb',33],3,['bb',55],56,27,['cc',2],['bb',2,['bb',4]],4,['dd',5,7]]

在此列表中搜索索引 0 中具有“bb”的列表(列表中的第一项)的首选 Python 方法是什么?我希望看到结果;

['bb',33],['bb',55],['bb',2,['bb',4]],['bb',4] 

【问题讨论】:

  • 嵌套的深度有限制吗?
  • 到目前为止您已经尝试过什么,您输入的预期输出是什么?
  • 我预计嵌套不会超过三四层,但不能精确。
  • 如果我搜索“bb”;在索引 00 中,我希望看到以下结果 - ['bb',33],['bb',55],['bb',2,['bb',4]],['bb' ,4].
  • @JC_RMB “索引00”是什么意思?

标签: python nested-lists


【解决方案1】:

你应该尝试使用递归函数

def list_search(slist):
     for count, item in enumerate(slist):
         if(item.__class__ is list):
             list_search(item)
         else:
             if(count == 0 and item == 'bb'):
                 print(slist)

这应该用于独立于深度的嵌套。

【讨论】:

  • 这似乎工作得很好。我不得不用 list_search(item) 替换 search(item) ,但除此之外,这很好。非常感谢您的帮助。
  • @JC_RMB 是的,这里有一点错字,已经修正了。很高兴它解决了您的问题,如果您对它的工作原理有任何疑问,请告诉我。
【解决方案2】:

递归在这里运行良好,使用 __class__ 魔术成员也是如此:

def recursive_match(the_list):
    index = 0

    for item in the_list:
        print(repr(item))

        if item.__class__ is list:
            recursive_match(item)
        elif index == 0 and item == 'bb':
            print('match')

        index += 1

mylist = ['aa',1,2,['bb',33],3,['bb',55],56,27,['cc',2],['bb',2,['bb',4]],4,['dd',5,7]]
recursive_match(mylist)

【讨论】:

    【解决方案3】:
    def findList(L, argument, index):
        if L[index] == argument:
            print L
        for element in L:
            if type(element) == list:
                findList(element, argument, index)
    

    这也可以,让您能够选择要搜索的参数和索引。但这个想法当然是使用递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 2014-03-06
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多