我有两个列表:
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。
答案 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]