我正在尝试遍历列表并获取列表的每个部分,对其进行编码并在完成所有操作后将结果加入。作为一个例子,我有一个字符串,它产生一个列表,每个元素的长度为16个字符。
message = (u'sixteen-letters.sixteen-letters.sixteen-letters.sixteen-letters.')
result = split16(message, 16)
msg = ';'.join(encode(result.pop(0)) for i in result)
encode函数采用16字节字符串并返回结果。但是按照它的编写方式,它只编码列表中一半的元素。
如果我尝试理解:
result = [encode(split16(message, 16) for message in list_of_messages)]
result = ''.join(result)
导致整个列表立即发送。我需要做的是分别将每个元素发送到encode函数,得到结果然后将它们连接在一起。
有没有简单的方法来实现这个目标?
答案 0 :(得分:1)
你想做这样的事吗?
';'.join(encode(i) for i in message.split('.'))
当然可能只是
';'.join(encode(i) for i in result)
如果您的split16
功能足够复杂。
答案 1 :(得分:1)
我对你正在尝试做的事情感到有点困惑,而你所发布的代码中缺少了一些内容,使我感到困惑:
result = [encode(split16(message, 16) for message in list_of_messages]
应该是:
result = [encode(split16(message, 16) for message in list_of_messages)]
或:
result = [encode(split16(message, 16)) for message in list_of_messages]
我认为第二个会做你想做的事。
此代码:
msg = ';'.join(encode(result.pop(0)) for i in result)
失败,因为在每个步骤中您都在迭代result
,但在pop
的每一步都缩短了它。它应该只是:
msg = ';'.join(encode(i) for i in result)
答案 2 :(得分:0)
我不太清楚你的目标是什么,但是
msg=";".join(map(encode,(message[i:i+16] for i in range(0,len(message),16))))