Проверка того, имеют ли 2 списка одинаковое значение или значение, индекс - PullRequest
2 голосов
/ 07 августа 2020

У меня есть 2 списка

a = [3,9,1,4,5]
b = [7,2,1,0,1]

Я пытаюсь напечатать строку на основе некоторого условия (то же значение или тот же индекс и значение в 2 списке), и результат должен быть

"Same Value(for duplicate number)"
"Same Value + Index(for duplicate number and same index)"

Я пробовал использовать итерацию, и, если так,

for x in a:
    for y in b:
        if x == y:
            if (a.index(x) == b.index(y)):
                print("Same Value + Index")
            else:
                print("Same Value")

, но каким-то образом вывод показывает это:

Same Value + Index
Same Value + Index
[Finished in 0.4s]

Или, может быть, есть более простой способ? Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Ваш logi c ошибается при поиске числа:

for x in a:
    for y in b:
        if x == y:
            if (a.index(x) == b.index(y)):

index находит первое вхождение значения. Ваш желаемый результат зависит от знания , какой у вас индекс . Вместо этого следите за значением и индексом:

for x_idx, x in enumerate(a):
    for y_idx, y in enumerate(b):
        if x == y:
            if x_idx == y_idx:   # This uses the current index
1 голос
/ 07 августа 2020

Причина, по которой вы видите распечатку дважды, состоит в том, что list.index возвращает индекс первого появления значения в списке, а не «текущего». Поэтому, когда ваш второй список имеет индекс 4, а первый - индекс 2, b.index(1) возвращает 2, а не 4, и происходит вторая распечатка.

Вы должны отслеживать свое текущее местоположение:

for i, x in enumerate(a):
    for j, y in enumerate(b):
        if x == y:
            if i == j:
                print("Same Value + Index")
            else:
                print("Same Value")

Если все, что вас волнует, это количество записей, которые соответствуют каждому условию:

both_match = len(set(enumerate(a)) & set(enumerate(b)))

Получить такое же количество «все, что соответствует», несколько сложнее. Вы можете использовать collections.Counter, чтобы получить правильные числа:

ca = Counter(a)
cb = Counter(b)
value_match = sum(ca[k] * cb[k] for k in ca.keys() & cb.keys())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...