927

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

11 回答 11

1638

使用str.join

>>> sentence = ['this', 'is', 'a', 'sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'
>>> ' '.join(sentence)
'this is a sentence'
于 2012-09-17T05:33:41.273 回答
200

将 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'
于 2015-12-01T03:11:58.587 回答
54

对于初学者来说知道 为什么 join 是一个字符串方法是非常有用的。

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

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

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

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

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

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'
于 2016-05-14T13:55:36.710 回答
16

从未来编辑:请不要使用下面的答案。这个函数在 Python 3 中被删除了,Python 2 已经死了。即使您仍在使用 Python 2,您也应该编写 Python 3 就绪代码,以使不可避免的升级更容易。


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

from str import join

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

join(sentence, "-") 

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

于 2015-11-02T01:51:03.193 回答
14
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
于 2020-09-03T09:18:52.127 回答
7

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

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)
于 2018-11-29T11:15:04.187 回答
3

我们可以指定我们必须如何加入字符串。代替'-',我们可以使用''

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)
于 2019-10-18T07:46:18.623 回答
1

如果你想在最终结果中生成一个用逗号分隔的字符串,你可以使用这样的东西:

sentence = ['this','is','a','sentence']
sentences_strings = "'" + "','".join(sentence) + "'"
print (sentences_strings) # you will get "'this','is','a','sentence'"
于 2020-06-30T15:20:02.993 回答
1

如果您有混合内容列表。并想对其进行字符串化。这是一种方法:

考虑这个列表:

>>> aa
[None, 10, 'hello']

将其转换为字符串:

>>> st = ', '.join(map(str, map(lambda x: f'"{x}"' if isinstance(x, str) else x, aa)))
>>> st = '[' + st + ']'
>>> st
'[None, 10, "hello"]'

如果需要,转换回列表:

>>> ast.literal_eval(st)
[None, 10, 'hello']
于 2021-01-27T10:21:57.657 回答
-1

如果没有 .join() 方法,您可以使用此方法:

my_list=["this","is","a","sentence"]

concenated_string=""
for string in range(len(my_list)):
    if string == len(my_list)-1:
        concenated_string+=my_list[string]
    else:
        concenated_string+=f'{my_list[string]}-'
print([concenated_string])
    >>> ['this-is-a-sentence']

因此,在此示例中基于范围的 for 循环,当 python 到达列表的最后一个单词时,它不应该在 concenated_string 中添加“-”。如果它不是您的字符串的最后一个单词,请始终将“-”字符串附加到您的 concenated_string 变量。

于 2020-07-07T11:03:36.563 回答
-2
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)
于 2020-05-07T21:18:04.153 回答