【问题标题】:How to convert a list of longs into a comma separated string in python [duplicate]如何在python中将long列表转换为逗号分隔的字符串[重复]
【发布时间】:2010-10-01 02:54:56
【问题描述】:

我是 python 新手,有一个 long 列表,我想将它们组合成一个逗号分隔的字符串。

在 PHP 中我会这样做:

$output = implode(",", $array)

在 Python 中,我不确定如何执行此操作。我试过使用连接,但这不起作用,因为元素类型错误(即不是字符串)。我是否需要创建列表的副本并将副本中的每个元素从 long 转换为字符串?还是有更简单的方法?

【问题讨论】:

  • 不是重复的; #44778 (",".join(list)) 中建议的解决方案仅适用于字符串列表。他们给你一个数字列表TypeError: sequence item 0: expected string, int found。 (是的,str() 业务在那里,但它被埋没了。)
  • 我投票决定保持关闭状态,因为副本上的所有答案都涉及将 long 转换为字符串,并且标题不会引导人们了解如何加入 long 列表(或其他非字符串)。但我怀疑 StackOverflow 可能会问我们这是一个测试,因为这个问题现在已经有近 10 年历史了......
  • @Ben 你介意我们把这个问题概括为“整数”吗?

标签: python


【解决方案1】:

您必须将整数转换为字符串,然后才能加入它们:

','.join([str(i) for i in list_of_ints])

【讨论】:

  • 非初学者注意事项:在 Python 2.4+ 中,您不需要在生成器表达式周围使用 [ ] -- 如果不使用它会更有效。
  • @cdleary:我意识到这已经晚了 4 年,但是……如果你在这里使用 genexp 而不是 listcomp,它通常会有点效率。至少str.join 的一些实现会迭代序列两次,这意味着无论如何他们都必须将它的生成器变成一个列表。特别是,CPython 2.4-3.3 使用PySequence_FAST 协议,PyPy 2.0.0 创建一个listview
  • 话虽如此,如果效率不是问题(通常不会),我可能还是会使用 genexp。当您真正关心的是构建一个可迭代对象时,没有概念理由在这里构建一个显式列表。
  • 为什么 Python join 方法不自己做 str 转换?然后代码会简单地读取",".join(list_of_ints),这样会更清晰、更容易理解。
【解决方案2】:

您可以使用 map 来转换列表,然后将它们连接起来。

",".join( map( str, list_of_things ) )

顺便说一句,这适用于任何对象(不仅仅是 long)。

【讨论】:

  • 对于 Weeble 的评论,如果 list_of_things 非常大,也许使用 itertools.imap() 会更好
  • 很少有东西足够大或时间紧迫,足以证明 itertools 优于内置地图。但是,如果基准测试表明这是瓶颈,您就有办法加快速度。
【解决方案3】:

我认为,从 Python 2.5 开始,您可以从 heikogerlach 的回答中省略方括号:

','.join(str(i) for i in list_of_ints)

这非常相似,但不是构建所有字符串的(可能很大)临时列表,而是根据连接函数的需要一次生成一个。

【讨论】:

  • Python 2.4 添加了由括号限制的生成器表达式,一次生成一个值,这与生成整个列表的方括号列表推导不同。由于单参数函数调用的快捷方式,删除方括号成为生成器表达式。
  • ... 除了join 函数无论如何都会构建列表,因此您不会获得任何东西(并且从 genexp 构建列表可能比仅使用 listcomp 慢一些)。有关详细信息,请参阅我对未知答案的评论。
【解决方案4】:

还有另一个版本(很酷,嗯?)

str(list_of_numbers)[1:-1]

【讨论】:

    【解决方案5】:

    为了它,你也可以使用字符串格式化:

    ",".join("{0}".format(i) for i in list_of_things)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-23
      • 2014-08-24
      • 2011-12-12
      • 1970-01-01
      • 2023-04-02
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多