[英]How to check if two lists have the same objects in the same order?
我有两个列表,需要检查它们是否包含相同顺序的相同对象。
list1 = [object1 , object2 , object3]
list2 = [object1 , object2 , object3]
list3 = [object2 , object3 , object1]
比较列表list1
和list2
,结果应为true
。
比较列表list1
和list3
,结果应为false
。
编辑:示例列表示例: list = [[<object1 at 0x04130AB0>], [<object2 at 0x04130210>, <object3 at 0x04130A10>]]
一个基本==
将只检查如果一个每个元素list
等于在另一相应的元素list
。 但是,假设你的例子是lst = [[<object1 at 0x04130AB0>], [<object2 at 0x04130210>, <object3 at 0x04130A10>]]
,你试图检查身份。 具有不同身份的两个对象可以比较为“相等”,这取决于该类的定义。 以下是一些示例,其中==
会告诉您两个list
在不同时包含相同顺序的相同对象:
>>> import collections
>>> a = collections.Counter()
>>> b = collections.Counter()
>>> a is b
False
>>> l1 = [a, b]
>>> l2 = [b, a]
>>> l1 == l2
True
>>> class Person:
... def __eq__(self, other):
... return True
...
>>> a = Person()
>>> b = Person()
>>> a is b
False
>>> l1 = [a, b]
>>> l2 = [b, a]
>>> l1 == l2
True
>>> a = []
>>> b = []
>>> a is b
False
>>> l1 = [a, b]
>>> l2 = [b, a]
>>> l1 == l2
True
>>> a.append(0)
>>> l1 == l2
False
如果要检查相应的元素实际上是同一个对象(标识,而不是相等),则需要以某种方式手动比较标识,例如:
>>> import collections
>>> a = collections.Counter()
>>> b = collections.Counter()
>>> a is b
False
>>> l1 = [a, b]
>>> l2 = [b, a]
>>> all(x is y for x,y in zip(l1, l2))
False
>>> a = Person()
>>> b = Person()
>>> a is b
False
>>> l1 = [a, b]
>>> l2 = [b, a]
>>> all(x is y for x,y in zip(l1, l2))
False
>>> a = []
>>> b = []
>>> a is b
False
>>> l1 = [a, b]
>>> l2 = [b, a]
>>> all(x is y for x,y in zip(l1, l2))
False
很简单,只需使用==
来共同绘制两个列表。 如果两个列表具有相同的元素并且应该以相同的顺序放置,则它应返回True
,否则返回False
list1 == list2
实现上述逻辑的函数应该是这样的,
def check_lists(list1, list2):
return list1 == list2
例如:
>>> ['object1' , 'object2' , 'object3'] == ['object1' , 'object2' , 'object3']
True
>>> ['object1' , 'object2' , 'object3'] == ['object3', 'object1' , 'object2' ]
False
>>> [['object1' , 'object2'] , ['object3']] == [['object1' , 'object2'] ,['object3']]
True
>>> [['object1' , 'object2'] , ['object3']] == [['object1' , 'object2'] , 'object3']
False
假设T在平等上的身份区别很重要。
def check_id(li1, li2):
return [id(o) for o in li1] == [id(o) for o in li2]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.