我想知道是否可以执行以下操作:
very_special = ["special"]
my_list = ["stuff", very_special]
if "special" in my_list:
print ("Found it")
我想知道你是否可以通过某种方式做到这一点,让代码查看整个内容,包括列表中的列表。
答案 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")