【问题标题】:Explode list of lists into separate lists python将列表列表分解为单独的列表python
【发布时间】:2016-12-04 04:53:40
【问题描述】:

我目前有一个列表列表,如

L = [['E2', 'C1', 'A1', 'B1', 'C2'], ['C1', 'D1', 'A1'], ['C1', 'C2']]

我的目标是将 L[i] 与 L[i+1] 进行比较以组成组。 例如, L[2] 是 L[0] 的一个子集,所以我会消除它。我的两个不同列表是 L[0] 和 L[1]。

为此,如果我能以某种方式将列表列表分解为不同的列表,则可以通过迭代 cmp(L[i], L[i+1]) 轻松实现。我的意思是不同的列表,我会将每个元素存储为单独的变量。 => L_1 = L[0],L_2 = L[1] 和 L_3 = L[2]。

zip 似乎只在两个列表之间做一种映射。谁能推荐一个可用的功能?

【问题讨论】:

标签: python list python-2.7 split


【解决方案1】:

您可以映射您的列表列表以创建集合列表。如果您然后遍历该列表,则可以检查它们是否是彼此的子集

LSets = map(set, L)

filteredL = filter(lambda s: not any(s.issubset(s2) for s2 in LSets if s != s2), LSets)

【讨论】:

  • 谢谢。这只会创建 listoflists 中所有元素的集合。但是,我打算只提取或保留 L[0] 和 L[1] 而不是 L[3],因为它已经存在于 L[0] 中。
  • @Arun 这就是第二个代码行中的过滤器的用途。它过滤掉作为任何其他集合的子集的所有集合
  • 谢谢。我同意你的看法。但是如果你看一下列表,L[2] 的所有元素都存在于 L[0] 中,但并非 L[1] 的所有元素都存在于 L[0] 中。因此我的最终输出将是 L[0] & L[1]。但是这里过滤器只创建 L[0] !.
  • @Arun 当我将此答案中的代码粘贴到我的 python 控制台(2.7.11)中时,filteredL 最终有两组; L[0] 和 L[1]。 L[1] 不是任何其他的子集,因此不会被删除。
  • 嗨。我在mac中也有相同的版本。但这是filteredL的输出,我得到: [set(['A1', 'C2', 'C1', 'B1', 'E2'])] 这是L[0]
猜你喜欢
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2013-07-23
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多