来自两个列表的子集值

我有两个清单:


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。


斯蒂芬大帝
浏览 147回答 3
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')

MMTTMM

简单的itertools.takewhile功能:from itertools import takewhilea = ['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']

慕侠2389804

尝试这个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] 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python