data_sets = [
['O'],
['X'],
# These data sets put Sheet A in all possible locations and orientations
# Data sets 2 - 9
['O', ['Sheet A', 'Location 1', 'Upright']],
['O', ['Sheet A', 'Location 2', 'Upright']],
['O', ['Sheet A', 'Location 3', 'Upright']],
['O', ['Sheet A', 'Location 4', 'Upright']],
['O', ['Sheet A', 'Location 1', 'Upside down']],
['O', ['Sheet A', 'Location 2', 'Upside down']],
['O', ['Sheet A', 'Location 3', 'Upside down']],
['O', ['Sheet A', 'Location 4', 'Upside down']]
]
for each in data_sets:
if 'Sheet A' in each:
print('1')
当我运行它时,它不打印任何东西,因为我不认为它通过所有的子列表。我怎么能让这个工作?
答案 0 :(得分:2)
您可以使用itertools.chain.from_iterable
import itertools
for each in data_sets:
if "Sheet A" in itertools.chain.from_iterable(eeach):
print("1")
1
1
1
1
1
1
1
1
这里有live example
答案 1 :(得分:1)
in
不是递归的。它试图在列表中找到该项目。如果该项目是list
,则in
不会在列表中查找该字符串。
在你的情况下,你可以
in
for each in data_sets:
if len(each)>1 and 'Sheet A' in each[1]:
print('1')
当然,如果结构更复杂/未修复,则必须使用递归方法来测试项类型,如下所示:Python nested list recursion search
答案 2 :(得分:1)
def listChecker(list_elems):
for list_elem in list_elems:
if "Sheet A" in list_elem:
print "1"
if any(isinstance(elem, list) for elem in list_elem):
listChecker(list_elem)
listChecker(data_sets)
您也可以使用此功能。在所有嵌套列表中打印1会很有帮助。只需将列表对象传递给此函数即可。
答案 3 :(得分:0)
您也可以count
查看。
for each in data_sets:
if len(each)>1 and each[1].count("Sheet A"):
print('1')
len(each)>1
检查列表项的数量。each[1]
是您给定列表的第二个子列表。并.count("Sheet A")
返回Sheet A
的出现次数。