【问题标题】:Comparing two lists having multiple values in each item [duplicate]比较每个项目中具有多个值的两个列表[重复]
【发布时间】:2020-11-03 15:52:54
【问题描述】:

我有两个列表 A = [[1, 2, 3, 4], [5, 6, 7, 8]] 和另一个列表 B = [[1, 2, 3, 4], [8, 6, 3, 2]]。现在我想比较AB 中的子字符串。如果它们包含相同的子列表,那么我想将它们附加到单独的列表中。我以正常方式比较字符串。但是由于它们在单个项目中包含 4 个值,因此会引发错误:具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all() 。我找不到任何方法来解决这个问题。给定示例的预期输出为[[1, 2, 3, 4]]

【问题讨论】:

  • 什么子串?您的示例中没有字符串。注意,您的错误消息似乎暗示您正在使用 numpy.ndarray 对象而不是 python 列表。请提供minimal reproducible example,其中包含您预期的输出以及您尝试过的导致该错误的明确输入,包括完整的错误消息和堆栈跟踪/

标签: python list list-comparison


【解决方案1】:

您可以只使用普通相等来比较子列表,然后将两个列表压缩在一起以比较相同索引处的项目,例如

[a for a, b in zip(A, B) if a == b] 

将返回所有在AB 中相同的元素的列表(并且两者的索引相同)。

我有两个列表 A = [[1, 2, 3, 4], [5, 6, 7, 8]] 和另一个列表 B = [[1, 2, 3, 4], [8, 6 , 3, 2]]。现在我想比较 A 和 B 中的子字符串。

你有列表的列表,这里没有子字符串。

我以正常方式比较字符串。

你在说什么? “比较字符串的正常方法”是什么?

但由于它们在单个项目中包含 4 个值,因此会引发错误:具有多个元素的数组的真值是不明确的。

什么错误?不,不是。 python中数组的真值是空数组为假,非空数组为真。同时,两个数组的比较只是字典顺序的。任何地方都没有歧义。

使用 a.any() 或 a.all() 。

这和其他东西有什么关系?

我找不到任何方法来解决这个问题。

您实际尝试了什么,这些尝试背后的原因是什么,结果如何?

【讨论】:

  • 嗨,不是子字符串,它们是子列表。这是我的错。我只是想比较它们。我是编码新手。我对python也不太了解。实际上问题中的四个坐标是从模板匹配中获得的边界框坐标。我只想将一组与另一组进行比较,如果发现任何类似的,那么我想添加到一个新列表中。
  • 您可以只使用普通相等来比较子列表,然后将两个列表压缩在一起以比较相同索引处的项目,例如[a for a, b in zip(A, B) if a == b] 将返回 A 和 B 中相同的所有元素的列表(并且两者的索引相同)。
  • “python 中数组的真值是空数组是假的,非空数组是真的”您正在考虑列表。几乎可以肯定 OP 正在使用 numpy.ndarray 对象。不要回答没有提供足够问题描述的问题和minimal reproducible example
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2016-11-17
相关资源
最近更新 更多