Python 对两个列表中的值进行子集设置

Python 对两个列表中的值进行子集设置,python,list,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 = ['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。

使用zip函数进行压缩,然后像这样解压

a=['E','E','E','E','E','E','E','C','C'] b=['C','C','E','E','E','E','E','C','E','C'] a、 b=zip*[ai,bi代表ai,zipa中的bi,如果ai==E,则为b] 版画 版图 输出

简单功能:

试试这个

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] 


非常感谢。由于某些原因,这在我的较长列表上不起作用,问题中的列表是虚拟列表。@HajSai,而不是虚拟列表发布更实际的输入示例如果在上一个E之前有Cs,则这不起作用,比如在开始时,实际列表的长度为33452个值,这就是我没有发布它的原因。@HajSai,那么,这种方法适用于您发布的输入。我不是告诉你发布整个33452长列表,而是发布一个涵盖扩展条件的更具代表性的输入列表。这也不起作用。尝试使用此输入a=['C','E','E','E','E','E','E','E','E','C','C']b=['E','C','C','E','E','E','E','E','C'][i代表i,如果x==E,枚举中的x]b=[b[i]代表索引中的i]a=[x代表a中的x,如果x==E']
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']
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]