比较2个python列表,最多n-2个元素

比较2个python列表,最多n-2个元素,python,python-3.5,Python,Python 3.5,比较最多n-2个元素的两个python列表: list1=[1,2,3,'a','b'] 列表2=[1,2,3,'c','d'] list1==list2=>True 排除两个列表中的最后两个元素,它们是相同的 我可以通过比较两个列表中的每个元素来实现这一点。但是还有其他有效的方法吗?在第一对(a,b)之后返回false,其中a!=b def compare(list1,list2): for a,b in zip(list1[:-2],list2[:-2]): if

比较最多n-2个元素的两个python列表:

list1=[1,2,3,'a','b']
列表2=[1,2,3,'c','d']
list1==list2=>True
排除两个列表中的最后两个元素,它们是相同的


我可以通过比较两个列表中的每个元素来实现这一点。但是还有其他有效的方法吗?

在第一对(a,b)之后返回false,其中a!=b

def compare(list1,list2):
    for a,b in zip(list1[:-2],list2[:-2]):
        if a != b : 
            return False
    return True
这样:

 list1 = [1,2,3,'a','b']
 list2 = [1,2,3,'c','d']

 list1[:-2] == list2[:-2] => True
直接将列表切片。。。
Python
具有用于切片列表的语法,如下所示:

lst[start:stop:step]
它的一个简洁的特性是,您可以使用负值将列表切到从末尾指定的位置。因此,如果您有以下列表:

lst = [1,2,3,4,5]
您可以使用以下工具对其进行切片:

lst[:-3]
要获取从末尾到第三个的值,请执行以下操作:

[1,2,3]
因此,这可以用来比较两个列表:

list1 = [1,2,3,'a','b']
list2 = [1,2,3,'c','d']

list1[:-2] == list2[:-2] => True

如果列表非常大,并且希望避免使用
list1[:-2]==list2[:-2]
复制它们,则可以使用生成器表达式来获得更高效的内存解决方案:

all(a==b for a,b,_ in zip(list1, list2, range(len(list1)-2)))

list1[:-2]==list2[:-2]
虽然这不是一种有效的方法
返回全部(a==b代表a,b在zip中(list1[:-2],list2[:-2])
“list1[:-2]==list2[:-2]”比较每个项目,然后减少,否?在这两种情况下,您仍然看到O(n),所以没有那么大的不同。出于交流的目的,冗长。@绘制列表切片比较短路吗?它们至少是不同的,因为对列表项使用
==
也比较身份,例如
[np.nan]==[np.nan]
vs.
np.nan==np.nan
@Chris\u Rands如果列表比较短路,我不能绝对肯定,但我非常确定python开发人员足够聪明,能够有效地实现它。。。