Подстановка значений из двух списков - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть два списка:

a = ['E', 'E', 'E', 'E', 'E', 'E', 'E', 'C', 'C', 'C']
b = ['C', 'C', 'E', 'E', 'E', 'E', 'E', 'C', 'E', 'C']

И я хочу поднастроить их, чтобы получить:

a = ['E', 'E', 'E', 'E', 'E', 'E', 'E']
b = ['C', 'C', 'E', 'E', 'E', 'E', 'E']

Так, чтобы я держал 'E' в первом списке, но получаюсоответствующие позиционные значения с использованием индексов из второго списка b.

Я пытался использовать:

a = [x for x in a if x == 'E']
b = [x for x in b if x == 'E']

Но это не сохраняет порядок / позицию, вместо этого он извлекает только E из спискаб.

Ответы [ 3 ]

3 голосов
/ 22 сентября 2019

используйте функцию zip, чтобы сжать, а затем распаковать, как это

a = ['E', 'E', 'E', 'E', 'E', 'E', 'E', 'C', 'C', 'C']
b = ['C', 'C', 'E', 'E', 'E', 'E', 'E', 'C', 'E', 'C']

a, b = zip(*[(ai, bi) for ai, bi in zip(a,b) if ai=="E"])
print(a)
print(b)

Выход

('E', 'E', 'E', 'E', 'E', 'E', 'E')
('C', 'C', 'E', 'E', 'E', 'E', 'E')
1 голос
/ 22 сентября 2019

Попробуйте это

a = [x for x in a if x == 'E']

indexes = [i for i, x in enumerate(a) if x == "E"]

b = [b[i] for i in indexes] 

1 голос
/ 22 сентября 2019

Просто с itertools.takewhile особенность:

from itertools import takewhile

a = ['E', 'E', 'E', 'E', 'E', 'E', 'E', 'C', 'C', 'C']
b = ['C', 'C', 'E', 'E', 'E', 'E', 'E', 'C', 'E', 'C']

a_slice = list(takewhile(lambda x: x == 'E', a))
b_slice = b[:len(a_slice)]

print(a_slice)   # ['E', 'E', 'E', 'E', 'E', 'E', 'E']
print(b_slice)   # ['C', 'C', 'E', 'E', 'E', 'E', 'E']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...