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


573

有没有更简单的方法将列表中的字符串项连接为单个字符串?我可以使用该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

24
'-'.join(sentence)
2012年

Answers:


1049

用途join

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'

13
不明白,左边的“-”应该是什么?
劳伦斯·德索萨

5
@LawrenceDeSouza您想加入的字符串;请参阅文档,或者更多详细的答案
Burhan Khalid

9
sentence.join(" ")由于反向操作是,因此我也希望能够工作list.split(" ")。知道是否要将其添加到Python的列表方法中吗?
Wouter Thielen

10
@Wouter,不会。一方面,只能连接字符串列表。因此list.join不适用于任意列表。另一方面,的参数str.join可以是任何“可迭代”的字符串序列,而不仅仅是列表。唯一有意义的是内置函数join(list, sep)string如果您真的想要的话,(基本上已过时)模块中会有一个。
亚历克西斯2015年

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

将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'

3
当输入为字符串时,为什么需要列表理解?也map(str, my_lst)无需枚举list =)就足够了
alvas

5
该问题的大多数答案都在考虑列表中包含字符串的情况。我的是将列表转换为字符串的通用方法。在我的示例中,列表是类型,int但它可以是可以表示为字符串的任何类型。
2015年

3
除此之外,与lambda函数一起使用时,map也将很有用。例如' '.join(map(lambda x: ' $'+ str(x), my_lst))返回'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
添加映射实际上有助于除字符串之外的数据类型。大!
appleboy

39

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

一开始很奇怪,但此后非常有用。

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

.join更快,因为它只分配一次内存。比经典串联更好(请参阅扩展说明)。

一旦学习了它,它就会非常舒适,您可以执行以下技巧来添加括号。

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

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

12

尽管@Burhan Khalid的回答很好,但我认为这样更容易理解:

from str import join

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

join(sentence, "-") 

join()的第二个参数是可选的,默认为“”。

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


14
此功能在2.x中已弃用,并将在3.x中删除。既然如此,我不建议您在提供的其他答案中使用它。
马修·格林

@Mathew Green这个答案和Burhan Khalid的答案以不同的方式使用相同的功能,因此他的答案也已被弃用。但是感谢您指出这一点,gota弄清楚了如何加入3.x。但是,如果您使用的是2.x,它不会消失。
SilentVoid 2015年

1
他并不被弃用。您的建议使用Lib / string.py中的一个函数,该函数完全不同已弃用,而@BurhanKhalid答案使用不弃用的内置字符串方法。他的答案是现在和将来最正确的答案,而这仅在2.x版本上才有用。
马修·格林

可以这么说,如果您想推广这种替代方法,还应该包括警告,由于我之前的评论中概述的原因,不建议这样做。
马修·格林

2

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

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)


-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)

2
尽管此代码段可能是解决方案,但包括说明确实有助于提高帖子的质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
alan.elkin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.