Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python比较两个不同长度列表中的项目-顺序很重要_Python_List_Loops_For Loop_Indexing - Fatal编程技术网

python比较两个不同长度列表中的项目-顺序很重要

python比较两个不同长度列表中的项目-顺序很重要,python,list,loops,for-loop,indexing,Python,List,Loops,For Loop,Indexing,因此,在上面的列表中,只有索引0中的项目相同,而两个列表中的索引1到4不同。另外,list_2还有一个额外的项目'c'。 我想计算两个列表中索引不同的次数,在这种情况下,我应该得到3 我试着这样做: list_1 = ['a', 'a', 'a', 'b'] list_2 = ['a', 'b', 'b', 'b', 'c'] 我犯了一个错误 使用将列表配对,计算所有差异,然后添加长度差异 zip();你知道这些都是不同的: x = 0 for i in max(len(list_1),len

因此,在上面的列表中,只有索引0中的项目相同,而两个列表中的索引1到4不同。另外,
list_2
还有一个额外的项目
'c'
。 我想计算两个列表中索引不同的次数,在这种情况下,我应该得到3

我试着这样做:

list_1 = ['a', 'a', 'a', 'b']
list_2 = ['a', 'b', 'b', 'b', 'c']
我犯了一个错误

使用将列表配对,计算所有差异,然后添加长度差异

zip();你知道这些都是不同的:

x = 0
for i in max(len(list_1),len(list_2)):
    if list_1[i]==list_2[i]:
        continue
    else:
        x+=1
sum()
True
False
值相加;这是因为Python的
boolean
类型是
int
False
等于
0
True
等于
1
的子类。因此,对于每一对不同的元素,
生成的
值为True
=测试加起来为
1
s

演示:

如前所述,结果应该是3,如果列表中没有
None
s,则
zip\u longest
可以在这里提供帮助

>>> list_1 = ['a', 'a', 'a', 'b']
>>> list_2 = ['a', 'b', 'b', 'b', 'c']
>>> sum(a != b for a, b in zip(list_1, list_2))
2
>>> abs(len(list_1) - len(list_2))
1
>>> difference = sum(a != b for a, b in zip(list_1, list_2))
>>> difference += abs(len(list_1) - len(list_2))
>>> difference
3

我可以使用for循环尝试这种方法吗:

from itertools import zip_longest

list_1=['a', 'a', 'a', 'b']
list_2=['a', 'b', 'b', 'b', 'c']
x = sum(a != b for a,b in zip_longest(list_1,list_2))

您可以尝试以下方法:

>>> count = 0
>>> ls1 = ['a', 'a', 'a', 'b']
>>> ls2 = ['a', 'b', 'b', 'b', 'c']
>>> for i in range(0, max(len(ls1),len(ls2)), 1):
...     if ls1[i:i+1] != ls2[i:i+1]:
...         count += 1
...
>>> print count
3
>>>
或者尝试以下操作(未更改列表):


(输出:
Difference=3

不是更好,但这里有另一个选项

dif = 0 
for i in range(len(min(list_1, list_2))):
    if list_1[i]!=list_2[i]:
        dif+=1
    #print(list_1[i], " != ", list_2[i], " --> Dif = ", dif)

dif+=(len(max(list_1, list_2)) - len(min(list_1, list_2)))

print("Difference = ", dif)
如果len(a)
我想索引3中的元素也是一样的?应该得到三个;索引1和索引2处的项目不同,您有一个额外的元素。指数0和3处的元素相等。哦,是的,你是对的。输入错误。如果你能预先计算出你会在那里找到多少元素,为什么要在
列表2
中迭代所有额外的元素呢。如果再多一个元素也没什么区别,但是如果有一百万呢?您可以简单地计算列表长度的差异。
zip\u longest()
需要一个额外的参数,
fillvalue
。将其设置为
object()
,您就不必担心列表中的
None
值了。@MartijnPieters确实,这是正确的。但是,如果您不想出于任何原因检查长度,或者也不想获得带有人工值的匹配条目,那么它可能是有价值的。
list1 = [1,2,3,5,7,8,23,24,25,32]
list2 = [5,3,4,21,201,51,4,5,9,12,32,23]

list3 = []

for i in range(len(list2)):
    if list2[i] not in list1:
        pass
    else :
        list3.append(list2[i])
print list3
print len(list3)
dif = 0 
for i in range(len(min(list_1, list_2))):
    if list_1[i]!=list_2[i]:
        dif+=1
    #print(list_1[i], " != ", list_2[i], " --> Dif = ", dif)

dif+=(len(max(list_1, list_2)) - len(min(list_1, list_2)))

print("Difference = ", dif)
if len(a) < len(b):
                b = b[0:len(a)]
            else:
                a = a[0:len(b)]

            correct = sum(a == b)