【问题标题】:How do I concatenate items in a list to a single string?如何将列表中的项目连接到单个字符串?
【发布时间】:2016-03-29 01:57:29
【问题描述】:

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

【问题讨论】:

  • '-'.join(sentence)

标签: python string list concatenation


【解决方案1】:

使用str.join:

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

【讨论】:

  • 不明白,左边的“-”应该是什么??
  • @LawrenceDeSouza 要加入的字符串;请参阅documentationthis answer,其中包含更多详细信息。
  • 我有点期待sentence.join(" ") 也能正常工作,因为反向操作是list.split(" ")。知道这是否会被添加到 Python 的列表方法中吗?
  • @Wouter,它不会。一方面,只能连接字符串列表;所以list.join 不适合任意列表。另一方面,str.join 的参数可以是任何“可迭代”的字符串序列,而不仅仅是一个列表。唯一有意义的是内置函数join(list, sep);如果你真的想要的话,在(基本上已经过时的)string 模块中有一个。
  • @Leo ' '.join(['this', 'is', 'a', 'sentence'])
【解决方案2】:

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


@Burhan Khalid's answer虽然不错,但我觉得这样比较好理解:

from str import join

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

join(sentence, "-") 

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

【讨论】:

  • This function is deprecated in 2.x and going to be removed in 3.x. 既然如此,我不建议在提供的其他答案上使用它。
  • @Mathew Green 这个答案和 Burhan Khalid 的答案以不同的方式使用相同的功能,所以他的答案也被弃用了。但是感谢您指出这一点,必须弄清楚如何加入 3.x。但如果您使用的是 2.x,它不会消失。
  • 他的虽然没有被弃用。您的建议使用来自 Lib/string.py 的函数,它完全不同 并且 已弃用,而 @BurhanKhalid 答案使用未弃用的内置字符串方法。他的答案是现在和未来最正确的答案,而这仅适用于 2.x。
  • 所有这些都是说,如果你想推广这个替代方案,你还应该包含一个警告,由于我之前的 cmets 中概述的原因,不建议这样做。
【解决方案3】:

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

【讨论】:

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

对初学者了解非常有用 why join is a string method.

一开始很奇怪,后面就很好用了。

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

.join 更快,因为它只分配一次内存。比经典连接更好(参见extended explanation)。

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

>>> ",".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')连接这两个字符串。
【解决方案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)

【讨论】:

  • 太多不必要的复杂性,为什么不直接使用join
【解决方案6】:

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

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

【讨论】:

    【解决方案7】:
    def eggs(someParameter):
        del spam[3]
        someParameter.insert(3, ' and cats.')
    
    
    spam = ['apples', 'bananas', 'tofu', 'cats']
    eggs(spam)
    spam =(','.join(spam))
    print(spam)
    

    【讨论】:

    • 虽然此代码 sn-p 可能是解决方案,但包含解释确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    【解决方案8】:

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

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

    我希望这可以帮助某人。

    【讨论】:

      【解决方案9】:

      没有 .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 变量中。

      【讨论】:

        【解决方案10】:

        这肯定会有所帮助 -

        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) 
        
        
               
        

        【讨论】:

        • 在效率上,这个比join函数差很多
        【解决方案11】:
        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
        

        【讨论】:

          【解决方案12】:

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

          考虑这个列表:

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

          【讨论】:

            【解决方案13】:
            list = [1, "a", 3, "b", 3.14]
            
            list_str = ""
            
            for item in list:
              
                list_str += str(item)
            
            print (list_str)
            
            # > 1a3b3.14
            

            【讨论】:

              猜你喜欢
              • 2023-02-06
              • 1970-01-01
              • 2018-10-15
              • 2017-01-17
              • 1970-01-01
              • 2014-04-19
              • 2021-08-07
              相关资源
              最近更新 更多