Python在侧面列表中搜索列表

时间:2017-01-23 05:41:52

标签: python list python-3.x

我想知道是否可以执行以下操作:

very_special = ["special"]
my_list = ["stuff", very_special]
if "special" in my_list:
     print ("Found it")

我想知道你是否可以通过某种方式做到这一点,让代码查看整个内容,包括列表中的列表。

7 个答案:

答案 0 :(得分:3)

您可以使用递归来实现此目的。这些方面的东西:

very_special = ["special"]
my_list = ["stuff", very_special]

def nested_list_search(lst, term):
    for ele in lst:
        if isinstance(ele, list):
            nested_list_search(ele, term)
        else:
            if ele == term:
                print("Found it")

nested_list_search(my_list, "special")
>>> Found it

答案 1 :(得分:0)

其他用户在这里建议递归......对他所要求的内容来说可能是一种矫枉过正。您也可以查看项目。

very_special = ["special"]
my_list = ["stuff", very_special]

if "special" in my_list:
     print("Found it")

for item in my_list:
    if isinstance(item, list) and "special" in item:
        print("Found it nested inside")

答案 2 :(得分:0)

如果嵌套深度只有一层,则可以遍历外部列表中的每个元素:

for elem in my_list:
  if elem == "special" or (isinstance(elem, collections.Iterable) and "special" in elem):
    print("Found it.")

如果你想处理任意嵌套,你需要先将它们展平(如Vertica Date Transformation):

def flatten(lst):
  for elem in lst:
    if isinstance(elem, collections.Iterable) and not isinstance(elem, (str, bytes)):
      yield from flatten(elem)
    else:
      yield elem

if "special" in flatten(my_list):
    print ("Found it")

答案 3 :(得分:0)

对于这种情况,你需要一些解决方法,这是一个实现它的片段。你也可以自己编写自己的工作方式。

very_special = ["special", "v", ["xyz", "we"]]
my_list = ["stuff", "n", very_special]

def aggregate(newList):
    opList = []
    for item in newList:
        if list is type(item):
             opList += aggregate(item)  
        else:
            opList.append(item)

    return opList 


if "special" in aggregate(my_list):
     print ("Found it")

答案 4 :(得分:0)

使用原始建议方式无效。成员资格操作员in通常的行为是检查x是否为y成员,而不进行更深入检查x是否也是y成员的成员

对于这种情况,对于这个具体的例子,这是解决这个问题的一种非常具体的方法。

very_special = ["special"]
my_list = ["stuff", very_special]

for element in my_list:
    if "special" in element:
        print ("Found it")

答案 5 :(得分:0)

根据您的需要,以下方法可能适用:

import itertools

very_special = ["special"]
my_list = ["stuff", very_special]

if "special" in itertools.chain.from_iterable(my_list):
     print ("Found it")

这利用了Python的chain()函数,该函数从一个可以懒惰评估的单个可迭代参数中获取链式输入。

答案 6 :(得分:-1)

使用+运算符

very_special = ["special"]
my_list = ["stuff"] + very_special
if "special" in my_list:
    print ("Found it")