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