Сравните два списка и получите первое значение после выполнения условия - PullRequest
0 голосов
/ 15 марта 2020

У меня есть два списка с некоторыми общими значениями:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]

Как сравнить два списка, чтобы получить первый элемент в списке a после того же элемента в списке b? Ожидаемый результат будет:

c = [300.87, 700.19]

Спасибо!

Ответы [ 5 ]

2 голосов
/ 15 марта 2020

Я бы сжал список с собой и возвратил бы вторую часть кортежа, когда первая часть находится в b:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]

[n for m, n in zip(a, a[1:]) if m in b]
# [300.87, 700.19]

Это потенциально неэффективно, если b большой, но обрабатывает хорошие случаи - например, различные заказы или последний элемент из a, являющийся частью b.

1 голос
/ 15 марта 2020

Вы можете просто перебрать свой список ввода a и добавить преемников в список c всякий раз, когда элемент является элементом списка b.

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]

c = []
for index, item in enumerate(a):
    if item in b and index < len(a) - 1:
        c.append(a[index+1])

Это проверяет индекс не расширяться границ, поэтому, когда преемника нет, список остается без изменений.

1 голос
/ 15 марта 2020

вы можете использовать списочное понимание с list.index:

[a[a[:-1].index(e) + 1] for e in b]

output:

[300.87, 700.19]

, чтобы избежать такого большого количества срезов:

s = a[:-1]
[a[s.index(e) + 1] for e in b]
1 голос
/ 15 марта 2020

Вот подробный способ сделать это, который проверяет, что значение в b действительно существует в a, чтобы избежать ошибок, если его нет:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]
c = []
for v in b:
    try:
        i = a.index(v)
    except ValueError:
        i = -1
    if i >= 0 and i < len(a) - 1:
        c.append(a[i+1])
    else:
        c.append(float('nan'))

print(c)

Вывод:

[300.87, 700.19]
1 голос
/ 15 марта 2020

Вы можете использовать позиции индекса для решения этой проблемы.

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]
c = []
for x in b:
    c.append(a[a.index(x)+1])

Если вы запустите эту программу, то c = [300.87, 700.19]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...