Сравните два списка с плавающей точкой, где порядок и дубликаты имеют значение в Python - PullRequest
0 голосов
/ 01 марта 2019

Я хочу сравнить положение и разницу в стоимости между двумя списками.Мне нужно знать, насколько 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 различия.

Спасибо за любые рекомендации!

1 Ответ

0 голосов
/ 01 марта 2019

Если я правильно понимаю, это должно сработать:

sum(a != b for a, b in zip(listA, listB))

Дает ожидаемый результат 2.

Обратите внимание, что, поскольку в описании проблемы указано, что порядок важен, наборы будутздесь бесполезно, так как они не заказаны.

...