我有一个字符串和二进制序列(0和1的整数)
sent1 = 'ERAGSJKDLLDERRR'
bin_seq = 100101010100011
所以我想通过比较bin_seq
来获取字母。因此,如果bin_seq
的值在相应位置为1,它将返回字母。你知道吗
所以它应该返回:
'EGJDLRR'
我使用itertools.compress
进行上述操作。你知道吗
from itertools import compress
sent1 = 'ERAGSJKDLLDERRR'
bin_seq = 100101010100011
print("".join(list(itertools.compress(sent1, str(bin_seq)))))
返回输出:
'ERAGSJKDLLDERRR'
我知道我可以通过使用for
循环轻松完成:
sent_new = []
for i,j in zip(sent1, str(bin_seq)):
if j == '1':
sent_new.append(i)
print("".join(sent_new))
但我更关心的是,为什么它没有给出itertools.compress
的预期输出。
问题是您需要将(0,1)列表作为int提供给
compress
。你知道吗你可以用LC代替for循环
编辑:
出于兴趣,我选择了两种目前可用的解决方案:
你的
compress
方法很接近。它不起作用,因为字符串“0”和“1”在布尔上下文中的计算结果都为True。一个快速的解决方案是将它们转换为整数,因为在布尔上下文中0为False,1为True:结果:
相关问题 更多 >
编程相关推荐