当我必须比较两个类似数组的对象的内容时 - 例如list
s,tuple
s或collection.deque
s - 而不考虑对象的类型,我用
list(an_arrayish) == list(another_arrayish)
有没有更惯用/更快/更好的方法来实现这一目标?
答案 0 :(得分:4)
按元素比较:
def compare(a,b):
if len(a) != len(b):
return False
return all(i == j for i,j in itertools.izip(a,b))
对于Python 3.x,请改用zip
答案 1 :(得分:3)
元组似乎更快:
tuple(an_arrayish) == tuple(another_arrayish)
这是一个快速的基准:
>>> timeit.Timer('list(a) == list(b)', 'a, b = (1, 2, 3, 4, 5), (1, 2, 3, 4, 6)').timeit()
2.563981056213379
>>> timeit.Timer('list(a) == list(b)', 'a, b = [1, 2, 3, 4, 5], [1, 2, 3, 4, 6]').timeit()
2.4739551544189453
>>> timeit.Timer('tuple(a) == tuple(b)', 'a, b = (1, 2, 3, 4, 5), (1, 2, 3, 4, 6)').timeit()
1.3630101680755615
>>> timeit.Timer('tuple(a) == tuple(b)', 'a, b = [1, 2, 3, 4, 5], [1, 2, 3, 4, 6]').timeit()
1.475499153137207
答案 2 :(得分:0)
使用字典比较词典和列表进行比较 相应的元素。这意味着要比较相等的每个元素 必须比较相等,两个序列必须是相同的类型和 长度相同。
看到我们没有遇到惯例,其他一些语言使用“相等”意味着我们正在测试这些引用是否引用了内存中的同一个对象“我会说坚持==
相等性测试是最简单的方法,因此是最好的。