为了账号安全,请及时绑定邮箱和手机立即绑定

来自两个列表的子集值

来自两个列表的子集值

斯蒂芬大帝 2022-06-02 10:24:04
我有两个清单: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 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

使用 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')


查看完整回答
反对 回复 2022-06-02
?
MMTTMM

TA贡献1869条经验 获得超4个赞

简单的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']


查看完整回答
反对 回复 2022-06-02
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

尝试这个


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] 


查看完整回答
反对 回复 2022-06-02
  • 3 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号