在Python中遍历列表

0 投票
3 回答
583 浏览
提问于 2025-04-15 15:05

我想遍历一个列表,把列表里的每一部分都进行编码,最后把结果合在一起。举个例子,我有一个字符串,它会生成一个列表,列表里的每个元素都是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)

这个编码函数接收一个16字节的字符串,然后返回结果。不过按照现在的写法,它只编码了列表里一半的元素。

如果我尝试用列表推导:

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

这样做会把整个列表一次性发送过去。我需要的是把每个元素单独发送到编码函数,得到结果后再把它们合在一起。

有没有简单的方法可以做到这一点呢?

3 个回答

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)
1

你是在尝试做这样的事情吗?

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

当然,这也可能只是

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

如果你的 split16 函数足够复杂的话。

撰写回答