Python 如何将列表中的项目连接到单个字符串?

Python 如何将列表中的项目连接到单个字符串?,python,string,list,concatenation,Python,String,List,Concatenation,有没有更简单的方法将列表中的字符串项连接到单个字符串中?我可以使用str.join()函数吗 例如,这是输入['this'、'is'、'a'、'sencement'],这是所需的输出this-is-a-sencement sentence = ['this','is','a','sentence'] sent_str = "" for i in sentence: sent_str += str(i) + "-" sent_str = sent_str[:-1] print sent_s

有没有更简单的方法将列表中的字符串项连接到单个字符串中?我可以使用
str.join()
函数吗

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

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str
使用:


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


虽然很好,但我觉得这样更容易理解:

from str import join

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

join(sentence, "-") 
sentence = ['this','is','a','sentence']
sentences_strings = "'" + "','".join(sentence) + "'"
print (sentences_strings) # you will get "'this','is','a','sentence'"

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

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

这对初学者来说是非常有用的

开始时很奇怪,但之后很有用

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

.join
更快,因为它只分配一次内存。优于经典的串联(请参见)

一旦你学会了,你会觉得很舒服,你可以做一些像这样的技巧来添加括号

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

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,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)

我们可以指定如何连接字符串。我们可以使用“”,而不是“-”

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

如果要在最终结果中生成由逗号分隔的字符串,可以使用如下方式:

from str import join

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

join(sentence, "-") 
sentence = ['this','is','a','sentence']
sentences_strings = "'" + "','".join(sentence) + "'"
print (sentences_strings) # you will get "'this','is','a','sentence'"
我希望这可以帮助某人。

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

my_list=[“this”、“is”、“a”、“句子”]
concented_string=“”
对于范围内的字符串(len(my_列表)):
如果字符串==len(我的列表)-1:
concented_string+=我的_列表[字符串]
其他:
concented_string+=f'{my_list[string]}-'
打印([concented_string])
>>>[“这是一句话”]

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

这肯定会有帮助-

arr=['a','b','h','i']     # let this be the list
s=""                      # creating a empty string
for i in arr:
   s+=i                   # to form string without using any function
print(s) 


       

如果您有混合内容列表。想把它串起来。 这里有一个方法:

考虑以下列表:

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

“-”。join(句子)
不明白,左边的“-”应该是什么???@lawrencesouza您想要连接的字符串;请参阅,或哪个更详细。我有点期待
语句。join(“”)
也可以工作,因为反向操作是
list.split(“”)
。知道这是否会添加到Python的列表方法中吗?@Wouter,不会。一方面,只能连接字符串列表;因此,
list.join
不适合用于任意列表。另一方面,
str.join
的参数可以是字符串的任何“iterable”序列,而不仅仅是列表。唯一有意义的是一个内置函数
join(list,sep)
;如果你真的想要,在(基本上已经过时的)
string
模块中有一个。@Leo
'.join(['this','is','a','sence'])
在这种情况下,我不建议使用这个选项而不是提供的其他答案。@Mathew Green这个答案和Burhan Khalid的答案以不同的方式使用相同的函数,因此,他的答案也遭到了反对。但是谢谢你指出这一点,我已经找到了加入3.x的方法。但是,如果您使用的是2.x,它不会消失。不过,他的版本并没有被弃用。您的建议使用Lib/string.py中的一个函数,该函数完全不同,已被弃用,而@BurhanKhalid answer使用的是未被弃用的内置string方法。他的答案现在和将来都是最正确的,而这只适用于2.x版。所有这些都表明,如果你想推广这一替代方案,你还应该包括一个警告,出于我之前评论中概述的原因,不建议这样做。当输入为字符串时,为什么列表理解是必要的?另外,
map(str,my_lst)
在不枚举列表的情况下就足够了=)这个问题的大多数答案都考虑了列表中包含字符串的情况。Mine是一种将列表转换为字符串的通用方法。在我的示例中,列表的类型是
int
,但它可以是任何可以表示为字符串的类型。要添加到这一点,map在与lambda函数一起使用时也很有用。例如,
'.join(map(lambda x:'$'+str(x),my_lst))
将返回
'$1$2$3$4$5$6$7$8$9$10'
添加一个映射实际上有助于处理字符串以外的数据类型。伟大的太多不必要的复杂性了,为什么不直接使用
join
?而这个代码片段可能是解决方案,包括一个解释确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。就效率而言,这比连接函数糟糕得多。有人能解释第二个
join()
join((“,”)
的功能吗?它类似于魔法
(“(”,”)
是一个由两个字符串组成的元组-开括号
”(“
和右括号
”)
)。因此,第二个
join()
使用第一个
join()
的输出作为分隔符(即
'1,2,3,4,5'
)连接这两个字符串。
>>> ast.literal_eval(st)
[None, 10, 'hello']