提问人:alvas 提问时间:9/17/2012 最后编辑:Karl Knechtelalvas 更新时间:11/7/2023 访问量:2115239
如何将列表中的项连接(联接)为单个字符串
How to concatenate (join) items in a list to a single string
问:
如何将字符串列表连接成一个字符串?
例如,给定 ,我如何得到?['this', 'is', 'a', 'sentence']
"this-is-a-sentence"
有关在单独的变量中处理几个字符串的信息,请参阅如何在 Python 中将一个字符串附加到另一个字符串?。
对于相反的过程 - 从字符串创建列表 - 请参阅如何将字符串拆分为字符列表?或如何将字符串拆分为单词列表?视情况而定。
答:
使用 str.join
:
>>> words = ['this', 'is', 'a', 'sentence']
>>> '-'.join(words)
'this-is-a-sentence'
>>> ' '.join(words)
'this is a sentence'
评论
sentence.join(" ")
list.split(" ")
list.join
str.join
join(list, sep)
string
str()
''.join(map(str, [obj1,obj2,obj3]))
从未来编辑:请不要使用下面的答案。此函数在 Python 3 中删除,Python 2 已失效。即使您仍在使用 Python 2,您也应该编写 Python 3 就绪代码,以使不可避免的升级更容易。
虽然@Burhan哈立德的回答很好,但我认为这样更容易理解:
from str import join
sentence = ['this','is','a','sentence']
join(sentence, "-")
join() 的第二个参数是可选的,默认为 “ ”。
评论
将列表转换为字符串的更通用的方法(也包括数字列表)是:
>>> 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
评论
map(str, my_lst)
int
' '.join(map(lambda x: ' $'+ str(x), my_lst))
'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
map()
lambda
' '.join(f'${x}' for x in my_lst)
'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
' $'
对于初学者来说,了解为什么 join 是一个字符串方法非常有用。
一开始很奇怪,但之后非常有用。
联接的结果始终是一个字符串,但要联接的对象可以有多种类型(生成器、列表、元组等)。
.join
速度更快,因为它只分配一次内存。比经典串联更好(参见,扩展解释)。
一旦你学会了它,它就很舒服了,你可以做这样的技巧来添加括号。
>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'
>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'
评论
join()
join(("(",")"))
("(",")")
是两个字符串的元组 - 左括号和右括号。因此,第二个字符串使用第一个字符串的输出作为分隔符(即 )。"("
")"
join()
join()
'1,2,3,4,5'
.join
我们也可以使用 Python 的函数:reduce
from functools import reduce
sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)
评论
join
我们可以指定如何连接字符串。代替 ,我们可以使用:'-'
' '
sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)
def eggs(someParameter):
del spam[3]
someParameter.insert(3, ' and cats.')
spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)
评论
如果要在最终结果中生成用逗号分隔的字符串字符串,可以使用如下所示:
sentence = ['this','is','a','sentence']
sentences_strings = "'" + "','".join(sentence) + "'"
print (sentences_strings) # you will get "'this','is','a','sentence'"
评论
sentences_strings = ','.join(f"'{word}'" for word in sentence)
'
如果没有 .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变量中。
>>> 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
评论
>>>
如果您有一个混合内容列表并想要将其字符串化,则有一种方法:
请考虑以下列表:
>>> 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']
评论
str(aa)
"[None, 10, 'hello']"
也可以通过解压缩列表来联接列表中的值,该列表将值按顺序插入占位符中。它也可以处理非字符串。str.format()
format()
lst1 = ['this', 'is', 'a', 'sentence']
lst2 = ['numbers', 1, 2, 3]
'{}-{}-{}-{}'.format(*lst1) # 'this-is-a-sentence'
'{} {}, {} and {}'.format(*lst2) # 'numbers 1, 2 and 3'
对于大型列表,我们可以使用列表的长度来初始化适当数量的占位符。可以使用以下两种方法之一来做到这一点:
-
', '.join(['{}']*len(lst)).format(*lst)
-
('{}, '*len(lst)).rstrip(', ').format(*lst)
一个工作示例:
lst = [1.2345, 3.4567, 4.567, 5.6789, 7.8]
', '.join(['{}']*len(lst)).format(*lst) # '1.2345, 3.4567, 4.567, 5.6789, 7.8'
('{}, '*len(lst)).format(*lst).rstrip(', ')
# with a float format specification
', '.join(['{:.2f}']*len(lst)).format(*lst) # '1.23, 3.46, 4.57, 5.68, 7.80'
a=['这个', '是', '一个', '句子'] 打印('-'.join(a))
评论