我在python中有几个长列表并比较它们并找到彼此相等的列表,除了它们中的最后一个元素。 哪种方法最快?
答案 0 :(得分:14)
a[:-1]
是“a
的所有元素的缩写,但是最后一个元素。”如果您需要排除多于1个元素,请将1更改为您需要的数字。
a[:-1] == b[:-1]
会将a
和b
与最终元素进行比较。
有关切片的详细信息,请参阅this。
答案 1 :(得分:8)
使用类似if list1[:-1] == list2[:-1]
的内容。
答案 2 :(得分:1)
为了比较两个列表,我认为这样的事情会避免复制列表的任何部分,并在发现不匹配时立即停止:
len(a)==len(b) and all(a[i] == b[i] for i in range(len(a)-1))
要查找任意一组列表中的所有匹配项,我认为您需要比较每对列表 - 或者至少是每一对未检查过相同版本的列表(例如,如果A = B和B = C,您不需要检查A = C)。我不知道一个简单的算法。
或者,如果列表非常长并且您想要避免遍历它们,您可以计算每个列表中第一个N-1个元素的校验和,然后只比较校验和。
答案 3 :(得分:0)
# choose n to be whatever "last few elements" you want
n = 5
if list1[:-n] == list2[:-n]:
print("The lists are the same")
使用变量n
可以排除任意数量的最后一个"元素"从列表中。