如何从python子列表中提取值

时间:2017-09-11 09:03:28

标签: python list nested

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')

当我运行它时,它不打印任何东西,因为我不认为它通过所有的子列表。我怎么能让这个工作?

4 个答案:

答案 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不会在列表中查找该字符串。

在你的情况下,你可以

  • 检查列表是否至少包含2个项目
  • 对第二项
  • 执行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的出现次数。