【问题标题】:How to reformat variables in lists in list to make one list如何重新格式化列表中列表中的变量以制作一个列表
【发布时间】:2018-02-27 08:11:58
【问题描述】:

非常受欢迎的答案,但我的答案与其他答案不同。 我有一个清单:

s = [(1, 2, 3),
     (4, 5, 6),
     (7, 8, 9)]

我需要在没有其他列表的情况下将我的列表合并到一个大列表中。 我需要它们是字符串,所以我这样做了

[map(str, x) for x in s]

但是这样我得到[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]

所以我需要['1', '2', '3', '4', '5', '6', '7', '8', '9']

【问题讨论】:

标签: python list combinations


【解决方案1】:

你需要扁平化的列表理解:

print ([i for x in s for i in map(str, x)])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

【讨论】:

    【解决方案2】:
    import itertools
    s = [(1, 2, 3),
        (4, 5, 6),
        (7, 8, 9)]
    print(list(map(str,itertools.chain(*s))))
    

    【讨论】:

      【解决方案3】:

      您可以使用sumlist

      map(str, list(sum(s, ())))
      

      【讨论】:

        【解决方案4】:

        简单地使用嵌套列表理解可能是最简单的

        >>> [str(sii) for si in s for sii in si]
        ['1', '2', '3', '4', '5', '6', '7', '8', '9']
        

        【讨论】:

          【解决方案5】:

          另一种选择是使用reduce 制作平面列表,使用map 将元素转换为字符串。

          >>> from functools import reduce
          
          >>> s = [(1, 2, 3), (4, 5, 6),(7, 8, 9)]
          >>> list(map(str,reduce(lambda x,y: x+y,s)))
          >>> ['1', '2', '3', '4', '5', '6', '7', '8', '9']
          

          【讨论】:

          • 简洁明了,我发现reduce 比 Python 中大多数其他更“冗长”的方式要慢得多。有谁知道为什么?
          • @CalvinKu Here you go :)
          【解决方案6】:

          itertools.chain 方便用于此目的:

          from itertools import chain
          
          s = [(1, 2, 3),
               (4, 5, 6),
               (7, 8, 9)]
          
          list(map(str, chain.from_iterable(s)))
          
          # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
          

          【讨论】:

            猜你喜欢
            • 2016-08-20
            • 1970-01-01
            • 2016-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-10-03
            • 2023-03-08
            • 1970-01-01
            相关资源
            最近更新 更多