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條經驗 獲得超13個贊
from itertools import compress
''.join(compress(sent1, map(int, str(bin_seq))))
'EGJDLRR'
問題是您需要將compress(0, 1) 列表作為整數提供。
添加回答
舉報