从两个列表中设置子值

时间:2019-09-22 16:16:11

标签: python list

我有两个列表:

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']

但这不会保留顺序/位置,而是从列表b中仅提取E。

3 个答案:

答案 0 :(得分:3)

使用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 :(得分:1)

仅具有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']

答案 2 :(得分:1)

尝试一下

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]