比较两个浮动列表,其中顺序和重复项在 Python 中很重要
Compare two lists of floats where order and duplicates matter in Python
我想比较两个榜单的排名和数值差异。我需要知道 listB
与 listA
有多相似,不仅它们包含相同的值,而且这些值是否位于相同的位置。
from collections import Counter
listA = [0.01, 0.02, 0.04, 0.03]
listB = [0.01, 0.02, 0.03, 0.04]
def compareListMethod1(a, b):
return set(a).intersection(b)
def compareListMethod2(a, b):
c1 = Counter(a)
c2 = Counter(b)
diff = c1-c2
return list(diff.elements())
def compareListMethod3(a, b):
count = Counter(a) # count items in a
count.subtract(b) # subtract items that are in b
diff = []
for x in a:
if count[x] > 0:
count[x] -= 1
diff.append(x)
return diff
print(compareListMethod1(listA, listB)) # returns {0.02, 0.01, 0.04, 0.03}
print(compareListMethod2(listA, listB)) # returns []
print(compareListMethod3(listA, listB)) # returns []
所需的输出将显示两个列表彼此不同的次数。在这种情况下,前两个条目是准确的,但索引 2 和 3 处的条目不同 - 因此两个列表之间存在 2 个差异。
感谢您的指导!
如果我没理解错的话,这应该可行:
sum(a != b for a, b in zip(listA, listB))
给出 2
的预期输出。
请注意,因为您的问题描述指出顺序很重要,所以集合在这里没有用,因为它们没有顺序。
我想比较两个榜单的排名和数值差异。我需要知道 listB
与 listA
有多相似,不仅它们包含相同的值,而且这些值是否位于相同的位置。
from collections import Counter
listA = [0.01, 0.02, 0.04, 0.03]
listB = [0.01, 0.02, 0.03, 0.04]
def compareListMethod1(a, b):
return set(a).intersection(b)
def compareListMethod2(a, b):
c1 = Counter(a)
c2 = Counter(b)
diff = c1-c2
return list(diff.elements())
def compareListMethod3(a, b):
count = Counter(a) # count items in a
count.subtract(b) # subtract items that are in b
diff = []
for x in a:
if count[x] > 0:
count[x] -= 1
diff.append(x)
return diff
print(compareListMethod1(listA, listB)) # returns {0.02, 0.01, 0.04, 0.03}
print(compareListMethod2(listA, listB)) # returns []
print(compareListMethod3(listA, listB)) # returns []
所需的输出将显示两个列表彼此不同的次数。在这种情况下,前两个条目是准确的,但索引 2 和 3 处的条目不同 - 因此两个列表之间存在 2 个差异。
感谢您的指导!
如果我没理解错的话,这应该可行:
sum(a != b for a, b in zip(listA, listB))
给出 2
的预期输出。
请注意,因为您的问题描述指出顺序很重要,所以集合在这里没有用,因为它们没有顺序。