【问题标题】:Iterating through a list in Python遍历 Python 中的列表
【发布时间】:2009-10-15 11:04:21
【问题描述】:

我正在尝试遍历列表并获取列表的每个部分,对其进行编码并在全部完成后将结果连接起来。例如,我有一个字符串,它生成一个列表,每个元素的长度为 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)

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

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

【问题讨论】:

  • 你的列表理解在语法上是错误的
  • 感谢 SilentGhost,测试了您的代码并完美运行。
  • @rescue:不要评论你自己的问题。请修正您的问题以获得正确的代码。
  • “编码函数需要一个 16 字节的字符串”——你不是说 16 个字符的字符串吗? 1 个字符不一定是 1 个字节,尤其是因为您使用的是 unicode 字符串。

标签: python list list-comprehension


【解决方案1】:

您是否正在尝试做这样的事情?

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

当然也可以

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

如果您的split16 函数足够复杂。

【讨论】:

    【解决方案2】:

    我对您到底想要做什么感到有些困惑,而您发布的代码中缺少括号使情况更加复杂:

    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)
    

    【讨论】:

      【解决方案3】:

      我不太清楚你在追求什么,但是

      msg=";".join(map(encode,(message[i:i+16] for i in range(0,len(message),16))))
      

      【讨论】:

        猜你喜欢
        • 2016-08-27
        • 2011-09-14
        • 2022-11-22
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 2018-03-08
        • 2015-10-07
        相关资源
        最近更新 更多