3 回答
TA贡献1797条经验 获得超6个赞
你的compress方法很接近。它不起作用,因为字符串“0”和“1”在布尔上下文中都计算为 True。一种快速的解决方案是将它们转换为整数,因为在布尔上下文中 0 是 False 而 1 是 True:
import itertools
sent1 = 'ERAGSJKDLLDERRR'
bin_seq = 100101010100011
print("".join(itertools.compress(sent1, map(int, str(bin_seq)))))
结果:
EGJDLRR
TA贡献1752条经验 获得超4个赞
您可以使用 LC 而不是 for 循环
''.join([c for c, b in zip(sent1, str(bin_seq)) if b=='1'])
编辑:
为了感兴趣,我对这两个现在可用的解决方案进行了计时:
''.join(compress(sent1, map(int, str(bin_seq))))
1.360 s
''.join([c for c, b in zip(sent1, str(bin_seq)) if b=='1'])
0.766 s
TA贡献1842条经验 获得超12个赞
from itertools import compress
''.join(compress(sent1, map(int, str(bin_seq))))
'EGJDLRR'
问题是您需要将compress(0, 1) 列表作为整数提供。
添加回答
举报