【问题标题】:List Comprehension in Nested Lists嵌套列表中的列表理解
【发布时间】:2010-10-13 20:04:01
【问题描述】:

我有一个类似[["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]的列表

我想把它拆分出来,这样我就可以计算出 As、Bs 等的总数,但我是 Python 新手,并且有一点时间。

我正在使用[lx for lx in [li[1] for li in fieldlist if li[1]]] 尝试获取包含子子列表中所有项目的列表,但这会返回包含第一个子列表的列表([["a", "b", "c"], ["a", "b", "f"]] 而不是包含这些子列表内容的列表. 我很确定我只是在想这个错误,因为我是列表推导和 Python 的新手。

任何人有一个好方法来做到这一点? (是的,我知道我选择的名字 (lx, li) 很糟糕)

谢谢。

【问题讨论】:

    标签: python list-comprehension nested-lists


    【解决方案1】:

    这将为您提供所需的列表:

    [lx for li in fieldlist for lx in li[1] if li[1]]
    

    【讨论】:

    • 太棒了。我知道我必须很接近,但我并没有意识到你可以像这样遍历多个列表。谢谢!
    【解决方案2】:

    Pythonic 解决方案类似于:

    >>> from collections import Counter
    >>> Counter(v for (field, values) in fieldlist
    ...           for v in values)
    Counter({'a': 2, 'b': 2, 'c': 1, 'f': 1})
    

    【讨论】:

      【解决方案3】:

      列表理解:

      >>> s = [["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]
      >>> [x for y, z in s for x in z]
      ['a', 'b', 'c', 'a', 'b', 'f']
      >>>
      

      您的if li[1] 的目的是什么?如果li[1] 是空列表或其他容器,则测试是多余的。否则,您应该编辑您的问题以解释它可能是什么。

      【讨论】:

      • 这是我打印列表时的保留,我想跳过空的。我没有意识到这是多余的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      相关资源
      最近更新 更多