2009-10-15 103 views
0

我正在尝试遍历列表并获取列表的每个部分,对它进行编码并在完成时加入结果。作为一个例子,我有一个字符串,它生成一个列表,每个元素的长度为16个字符。在Python中对列表进行迭代

message = (u'sixteen-letters.sixteen-letters.sixteen-letters.sixteen-letters.') 
result = split16(message, 16) 
msg = ';'.join(encode(result.pop(0)) for i in result) 

编码函数需要一个16字节的字符串并返回结果。然而,按照它的编写方式,它只对列表中的一半元素进行编码。

如果我试图理解:

result = [encode(split16(message, 16) for message in list_of_messages)] 
result = ''.join(result) 

它导致整个名单一次发送。我需要做的是将每个元素分别发送到编码函数,获得结果然后将它们连接在一起。

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

+0

您的列表理解在语法上是错误的 – SilentGhost 2009-10-15 11:07:30

+0

感谢SilentGhost,测试了您的代码并完美地工作。 – rescue 2009-10-15 11:16:31

+0

@rescue:不要评论你自己的问题。请修复您的问题以获得正确的代码。 – 2009-10-15 11:29:19

回答

1

你想要做这样的事吗?

';'.join(encode(i) for i in message.split('.')) 

当然这可能只是

';'.join(encode(i) for i in result) 

如果够复杂了您的split16功能。

0

我不太清楚你所追求的,但

msg=";".join(map(encode,(message[i:i+16] for i in range(0,len(message),16)))) 
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)