【问题标题】:How can I optimally concat a list of chars to a string?如何以最佳方式将字符列表连接到字符串?
【发布时间】:2010-11-12 16:14:47
【问题描述】:

数据:

list = ['a','b','x','d','s']

我想创建一个字符串 str = "abxds"。我该怎么做?

现在我正在做类似的事情:

str = ""
for i in list:
    str = str + i
print(str)

我知道字符串在 Python 中是不可变的,这将创建 7 个字符串对象。当我这样做数千次时,这就会消失在我的记忆中。

有没有更有效的方法来做到这一点?

【问题讨论】:

  • 您应该避免使用“list”作为列表的名称,因为列表是内置的(与“str”相同)
  • str 对象在 Python 中是不可变的,这就是它为每个连接操作创建一个新的str 对象的原因。
  • 对不起,错字,字符串是不可变的
  • @Naoh: 我不会使用 list 或 str

标签: python string


【解决方案1】:
>>> theListOfChars = ['a', 'b', 'x', 'd', 's']
>>> ''.join(theListOfChars)
'abxds'

顺便说一句,不要使用 liststr 作为变量名,因为它们已经是内置函数的名称。

(另外,Python 中没有 char。“字符”只是长度为 1 的字符串。因此 ''.join 方法也适用于字符串列表。)

【讨论】:

  • 是最有效的方法吗?
  • 速度差异:无连接:1.01871395111 有连接:0.609759092331
  • 很抱歉,无法理解您的意思。你的意思是说我可以在其中嵌入一些其他代码并使其更快?
  • @Ringo:是的,你可以制作一个特定的 C 接口,但这样做很麻烦,而且不会比''.join 有很大的收益。
  • 你应该做的是使用.join()。然后,如果您的代码仍然不够快,请对其进行分析。如果.join() 成为瓶颈,然后考虑编写一个 C 模块来替换它。如果您可以假设列表的内容将是单个 ASCII 字符,那么 C 版本确实可能比 .join() 快得多。
【解决方案2】:

KennyTM 的回答很棒。另外,如果你想让它们用逗号分隔或其他东西,那就是:

",".join(characterlist)

这将导致 "a,b,x,d,s"

【讨论】:

    【解决方案3】:

    你要找的是str.join():

    >>> L = ['a','b','x','d','s']
    >>> ''.join(L)
    'abxds'
    

    (不要将变量命名为 list,这是一个内置名称。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 2015-12-18
      • 2012-11-18
      • 2016-12-11
      • 1970-01-01
      • 2022-06-17
      • 2021-08-07
      • 2010-10-06
      相关资源
      最近更新 更多