【问题标题】:Flattening list from tokens of list of lists in python? [duplicate]从python中列表列表的标记中展平列表? [复制]
【发布时间】:2019-10-31 21:03:05
【问题描述】:

假设我有一个列表列表(包含句子的标记)。

例如:

new_list = ['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]

我想将它们合并回一个列表?

如何做到这一点?有什么捷径吗?

输出:

['大家好,我是个好孩子','python 是一门语言'。]

我尝试过的如下:

1) new_list_1 = (''.join(str(new_list)))

2) from itertools import chain
   new_list_1 = list(chain(*new_list))

目前我得到的输出(仅就合并标记而言)为:

new_list_1 = ['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.' 'python', 'is', 'a', 'language', '.']

【问题讨论】:

  • 为什么你有一个单独的.作为一个项目,应该是前一个单词的一部分

标签: python python-3.x list token flatten


【解决方案1】:

试试这个:

new_list = [['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]
new_list = [' '.join(i) for i in new_list]

输出

['hello folks i am a good boy .', 'python is a language .']

如果你想添加最后一个没有任何空格的项目,试试这个:

new_list = [' '.join(i[:-1])+i[-1] for i in new_list]

输出

['hello folks i am a good boy.', 'python is a language.']

注意,在这种情况下,. 之前的两个字符串中都没有添加空格

【讨论】:

    【解决方案2】:

    您的第一种方法将整个列表转换为字符串

    In [7]: ''.join(str(new_list))                                                                                                  
    Out[7]: "[['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]"
    

    而您的第二种方法会使您的列表变平

    In [10]: new_list_1 = list(chain(*new_list))                                                                                    
    
    In [11]: new_list_1                                                                                                             
    Out[11]: 
    ['hello',
     'folks',
     'i',
     'am',
     'a',
     'good',
     'boy',
     '.',
     'python',
     'is',
     'a',
     'language',
     '.']
    

    最后一个元素 . 理想情况下应该是之前单词的一部分,因为标点符号不是标记,所以你的列表应该看起来像

    new_list = [['hello', 'folks', 'i', 'am', 'a', 'good', 'boy.'], ['python', 'is', 'a', 'language.']]
    

    相反,您想遍历列表并将str.join 应用于子列表

    In [13]: [ ' '.join(item) for item in new_list]                                                                                 
    Out[13]: ['hello folks i am a good boy.', 'python is a language.']
    

    您也可以使用mapstr.join 应用于列表的项目

    In [14]: list(map(' '.join, new_list))                                                                                          
    Out[14]: ['hello folks i am a good boy.', 'python is a language.
    

    【讨论】:

      【解决方案3】:

      尝试列表理解

      new_list = [['hello', 'folks', 'i', 'am', 'a', 'good', 'boy', '.'], ['python', 'is', 'a', 'language', '.']]
      
      res_list = [' '.join(x) for x in new_list]  # this line will do your work
      
      print(res_list)
      

      结果:['大家好,我是个好孩子','python 是一门语言。']

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 2021-09-07
        • 2022-11-28
        • 2012-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多