【问题标题】:How do you compare multiple two dimensional list that are the same values?您如何比较具有相同值的多个二维列表?
【发布时间】:2019-10-02 15:10:58
【问题描述】:

我正在尝试在多个列表之间创建连接或模式。例如,如果列表“C”与“D”具有相同的值,而 D 与“B”具有相同的值,我想用一个新变量返回匹配值并返回不在匹配值中的值,并且创建另一个变量。如果可以做到这一点,您可以使用列表推导来解决此问题吗?另一个例子,这是我的清单

B = [[3, 21, 27], [3, 7, 21, 27], [3, 7, 21, 27],
     [3, 7, 21, 27], [3, 21, 27], [7, 21, 27]]

C = [[[2, 7, 8], [4, 13, 15]], 
     [[2, 5, 6], [8, 11, 12]], [[4, 6, 9], [6, 10]]]

D = [[2, 3, 4, 5, 6], [2, 3, 7, 8, 9], [4, 5, 7, 8, 10],
     [4, 6, 10, 16, 20], [2, 3, 12, 17, 20], [7, 11, 16, 17, 20]]

我希望我的结果是:

[[[[2, 3], [8, 2, 7, 3], [], [], [2, 3], []],[[3,4], [], [7, 4], [], [3], [7]],[[3, 2, 5, 6], [3, 7, 2 ], [7, 5], [], [3, 2], [7]],[[3], [3, 7, 8], [], [], [3, 12], [7, 11]],[[3, 4, 6], [3, 9], [], [], [], []],[], [], [7, 10], [], [], []]]]

如果可能的话,我想删除空格。

[[[[2, 3], [8, 2, 7, 3], [2, 3]],[[3,4],[7, 4],[3], [7]],[[3, 2, 5, 6], [3, 7, 2 ], [7, 5],[3, 2], [7]],[[3], [3, 7, 8],[3, 12],[7, 11]],[[3, 4, 6],[3, 9]],[[7, 10],]]]

我尝试在下面使用此代码,它有效,但仅当我尝试将“B”匹配到“D”时才有效。我试图让“C”和“B”匹配“D”

E = ([[[list(set(x) & set(y)) for x in D] for y in B]])

【问题讨论】:

  • 你能提供一个干净、简单的例子吗? C、B、D 和预期输出的值是多少?
  • 抱歉忘了放那个。它一直在更新。以防万一这是我的清单B = [[3, 21, 27],[3, 7, 21, 27],[3, 7, 21, 27],[3, 7, 21, 27],[3, 21, 27],[7, 21, 27]] C = [[[2, 7, 8],[4, 13, 15]],[[2, 5, 6],[8, 11, 12]] ,[[4, 6, 9],[6,10]]] D = [[2, 3, 4, 5, 6],[2, 3, 7, 8, 9],[4, 5, 7, 8, 10],[4, 6, 10, 16, 20],[2, 3, 12, 17, 20],[7, 11, 16, 17, 20]]
  • 您的列表 C 比其他列表多一层嵌套,对吗?
  • 是的。它仍然可以工作还是有其他方法可以解决?

标签: python python-3.x list multidimensional-array


【解决方案1】:

如果你想要独特的价值,set 确实是要走的路。

添加一个联合步骤应该可以完成这项工作:

(set(B) | set(C)) & set(D)

值得一试吗?

【讨论】:

  • C 有另一个列表级别,确实是一个问题。按照您的模板,此示例适用于 2 个级别列表 E = ([[[list(set(x) | set(y)) for x in B] for y in C]]) F = ([[[list(set(x) & set(y)) for x in E] for y in D]])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多