【问题标题】:how to extract values from python sublists如何从python子列表中提取值
【发布时间】:2017-09-11 09:03:27
【问题描述】:
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')

当我运行它时,它不会打印任何东西,因为我认为它不会遍历所有子列表。我怎样才能让它工作?

【问题讨论】:

  • 您需要先检查子列表的长度,然后在可能的子列表中检查“表 A”。

标签: python list nested


【解决方案1】:

您可以使用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

【讨论】:

  • 搜索是否查看 cmets?我想在“如何检查列表中的(内部)嵌套列表中的项目”下找到这个。很棒的工具,很好用。
  • 我相信 interable(eeach) 是一个错字。对我来说,与 interable(each) 类似的作品,就像在“for”行中一样。
【解决方案2】:

in 不是递归的。它试图在列表本身中找到该项目。如果项目是listin 将不会在列表中向下查找字符串。

在你的情况下,你可以

  • 检查列表是否至少包含 2 个项目
  • 对第二个项目执行in

像这样:

for each in data_sets:
    if len(each)>1 and 'Sheet A' in each[1]:
        print('1')

当然,如果结构更复杂/不固定,则必须使用递归方法来测试项目类型,例如:Python nested list recursion search

【讨论】:

    【解决方案3】:
    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 都会很有帮助。只需将您的列表对象传递给此函数即可。

    【讨论】:

    • 我要添加这个,如果你没有
    【解决方案4】:

    您也可以通过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 的出现次数。

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多