将列表中的项连接到字符串

alv*_*vas 478 python string join list concatenation

有没有更简单的方法将列表中的字符串项连接成一个字符串?

我可以使用该str.join()功能加入列表中的项目吗?

例如,这是输入['this','is','a','sentence'],这是所需的输出this-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str
Run Code Online (Sandbox Code Playgroud)

Bur*_*lid 896

用途join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'
Run Code Online (Sandbox Code Playgroud)

  • 不明白,左边的' - '应该是什么? (11认同)
  • @Wouter,它不会.一方面,只能连接字符串列表; 所以`list.join`不适合任意列表.另一方面,`str.join`的参数可以是任何"可迭代的"字符串序列,而不仅仅是列表.唯一有意义的是内置函数`join(list,sep)`; 如果你真的想要它,那么(基本上是过时的)`string`模块就有一个. (10认同)
  • 我有点期望`sentence.join("")`也可以工作,因为反向操作是`list.split("")`.不知道这是否会被添加到Python的列表方法中? (9认同)
  • @LawrenceDeSouza你想加入的字符串; 请参阅[文档](https://docs.python.org/2/library/stdtypes.html#string-methods)或[此答案](http://stackoverflow.com/questions/1876191/explain-python -join)更详细一点. (4认同)
  • @Leo'''.join(['this','is','a','sentence'])`` (4认同)
  • @Raghav,您必须在对象上调用 `str()` 方法,这会将其转换为字符串表示形式, `''.join(map(str, [obj1,obj2,obj3]))` (2认同)

6pa*_*kid 106

将python列表转换为字符串的更通用的方法是:

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str = ''.join(map(str, my_lst))
>>> print(my_lst_str)
'12345678910'
Run Code Online (Sandbox Code Playgroud)

  • 这个问题的大多数答案都在考虑列表中包含字符串的情况.我是将列表转换为字符串的通用方法.在我的示例中,列表的类型为`int`,但它可以是任何可以表示为字符串的类型. (5认同)
  • 添加地图实际上有助于除字符串之外的数据类型。伟大的! (4认同)
  • 当输入是字符串时,为什么列表理解是必要的?`map(str,my_lst)`就足够了而不枚举list =) (3认同)
  • 除此之外,当与lambda函数一起使用时,map也很有用.例如`''.join(map(lambda x:'$'+ str(x),my_lst))`将返回''$ 1 $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9 $ 10' (3认同)

小智 35

对于初学者来说,了解为什么join是一个字符串方法非常有用

一开始很奇怪,但在此之后非常有用.

join的结果总是一个字符串,但是要连接的对象可以是多种类型(生成器,列表,元组等)

.join更快,因为它只分配一次内存.比经典连接更好.扩展说明

一旦你学会了它,它就会非常舒服,你可以做这样的技巧来添加括号.

  >>> ",".join("12345").join(("(",")"))
  '(1,2,3,4,5)'

  >>> lista=["(",")"]
  >>> ",".join("12345").join(lista)
  '(1,2,3,4,5)'
Run Code Online (Sandbox Code Playgroud)

  • `("(",")")` 是两个字符串的元组 - 左括号 `"("` 和右括号 `")"`。因此,第二个“join()”使用第一个“join()”的输出作为分隔符(即“1,2,3,4,5”)来连接这两个字符串。 (5认同)
  • 有人可以解释第二个 `join()` 即 `join(("(",")"))` 的作用吗?就像魔法一样 (2认同)

Sil*_*oid 10

虽然@Burhan Khalid的回答很好,但我认为这样可以理解:

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 
Run Code Online (Sandbox Code Playgroud)

join()的第二个参数是可选的,默认为"".

编辑:此功能已在Python 3中删除

  • [此函数在2.x中已弃用,将在3.x中删除.](https://docs.python.org/2/library/string.html#deprecated-string-functions)既然如此,我不建议在提供的其他答案中使用它. (11认同)
  • 但他的并没有被弃用。您的建议使用 Lib/string.py 中的函数,该函数完全不同且已弃用,而 @BurhanKhalid 答案使用未弃用的内置字符串方法。他的答案是现在和未来最正确的答案,而这仅适用于现在的 2.x。 (3认同)
  • 可怕的是我仍然对此投赞成票。说真的,使用Python 3。 (2认同)

小智 9

我们可以指定如何连接字符串。'-'我们可以使用' '

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)
Run Code Online (Sandbox Code Playgroud)


mou*_*afa 8

list_abc = ['aaa', 'bbb', 'ccc']

string = ''.join(list_abc)
print(string)
>>> aaabbbccc

string = ','.join(list_abc)
print(string)
>>> aaa,bbb,ccc

string = '-'.join(list_abc)
print(string)
>>> aaa-bbb-ccc

string = '\n'.join(list_abc)
print(string)
>>> aaa
>>> bbb
>>> ccc
Run Code Online (Sandbox Code Playgroud)


小智 5

我们也可以使用 Python 的reduce函数:

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)
Run Code Online (Sandbox Code Playgroud)

  • 太多不必要的复杂性,为什么不直接使用“join”呢? (5认同)