迭代Python中的列表

时间:2009-10-15 11:04:21

标签: python list list-comprehension

我正在尝试遍历列表并获取列表的每个部分,对其进行编码并在完成所有操作后将结果加入。作为一个例子,我有一个字符串,它产生一个列表,每个元素的长度为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函数,得到结果然后将它们连接在一起。

有没有简单的方法来实现这个目标?

3 个答案:

答案 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))))