比较2个python列表,最多n-2个元素
比较最多n-2个元素的两个python列表:比较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
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开发人员足够聪明,能够有效地实现它。。。