繁体   English   中英

如何检查两个列表是否具有相同顺序的相同对象?

[英]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]

比较列表list1list2 ,结果应为true

比较列表list1list3 ,结果应为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM