[英]Efficient way to determine if elements in two lists are the same
我试图在 32 个选择(496 种可能性)的总体中找到 4 的独特组合,然后我将它们配对成一个矩阵(因此矩阵可能高达 496 x 496 或 25,000 个单元格)。 但是(使用数字表示选择)这意味着我有一些重复项 (1,2) 与 (3,4) 匹配与 (1,3) 与 (2,4) 匹配相同。 我需要做的是找到重复项(相同的四个选择,无论顺序如何)并将它们标记为重复项。 我玩过这个并阅读了我能找到的所有内容。 在这个问题中( https://www.csestack.org/compare-two-lists-python-return-non-match-elements/ )我开始了。 但是我的列表不同——它们看起来像 list_e 和 list_f 中的元素(见下面的代码),它们不会显示为重复项,即使玩家 2、4、6 和 8 出现在每个列表中。 理想情况下,我想找到一种方法来比较 list_e 和 list_f 并将它们注册为重复项。 如果我必须重新格式化 list_e 和 list_f 的内容,以便它们具有与 list_a 和 list_b 相同的结构,那至少可以完成工作。 但是,由于我有很多比较,所以我想以最有效的方式进行比较。
在此先感谢您的帮助。
if len(list_a) != len(list_b):
return False
if set(list_a) == set(list_b):
return True
else:
return False
list_a = [2, 4, 6, 8]
list_b = [2, 8, 6, 4]
list_c = [(2,4,6,8)]
list_d = [(4,6,2,8)]
list_e = [((2,4),(6,8))]
list_f = [((2,6),(4,8))]
if is_identical(list_a, list_b):
print("Two lists are identical.")
else:
print("Two lists are different.")
if is_identical(list_c, list_d):
print("Two lists are identical.")
else:
print("Two lists are different.")
if is_identical(list_e, list_f):
print("Two lists are identical.")
else:
print("Two lists are different.")
这将删除所有括号对其进行排序并检查列表是否相同。
a = [((1,2),(3,4))]
b = [((1,3),(2,4))]
from collections import Iterable # < py38
def flatten(items):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
for sub_x in flatten(x):
yield sub_x
else:
yield x
c = (list(flatten(a)))
d = (list(flatten(b)))
print(c.sort()==d.sort()) #True
我会在这里提供一些解释。
所以发生的事情是,首先您要遍历在展平 function 中传递的列表。
然后我们检查是否可以使用 isinstance 方法遍历列表,例如 (syntax) => isinstance(4, Int)
将给出 boolean 值,即True
yield 给出你想要返回的任何值,这经常与return
混淆,后者只给出 boolean 值
function 到此结束,现在我们只需要展平您提供的列表,使用.sort()
对其进行排序并进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.