【问题标题】:How can I convert a list of arrays into one single list? [duplicate]如何将数组列表转换为一个列表? [复制]
【发布时间】:2019-10-09 00:26:39
【问题描述】:

如何将数组列表转换为一个列表并每行打印 6 个元素?

数组列表如下所示:

[['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
 ['SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
 ['MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n'],
 ['PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']]

我希望它看起来像这样:

['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n',
 'SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n',
 'MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n',
 'PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']

我尝试过的是这段代码:

merged_list = []

for l in mylist:
    merged_list += l

这就是我得到的:

['UES9151GS5',
 'SQU6245R',
 'DEN',
 'FRA',
 '1420564460',
 '1049\n',
 'SJD8775RZ4',
 'SQU6245R',
 'DEN',
 'FRA',
 '1420564460',
 '1049\n',
 'MXU9187YC7',
 'MOO1786A',
 'MAD',
 'FRA',
 '1420563408',
 '184\n',
 'PUD8209OG3',
 'XXQ4064B',
 'JFK',
 'FRA',
 '1420563917',
 '802\n']

我正在寻找的是每行打印 6 个元素 非常感谢您的帮助。

【问题讨论】:

  • 等等,我很困惑。你做到了,对吧?那么问题/问题是什么?
  • 这个post的可能重复
  • 你只想每行打印 6 个元素吗?
  • 目的是什么?您是否需要它仍然看起来像一个 python 列表,带有[] 和逗号?
  • 这没有意义,你如何打印它与你如何将它与另一个列表结合起来没有关系,你能明确你想要做什么吗?

标签: python python-3.x list multidimensional-array jupyter-notebook


【解决方案1】:

这将得到你的输出:

from functools import reduce
d = [['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
 ['SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
 ['MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n'],
 ['PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']]
merged_list = reduce(lambda x, y: x + y, d)
print('[', end="")
for index, element in enumerate(merged_list):
    if element.endswith('\n'):
        if index != len(merged_list) - 1:
            print(f"'{element.strip()}\\n',\n", end="") # last element in row
        else:
            print(f"'{element.strip()}\\n'", end="") # last element in list
    else:
        print(f"'{element.strip()}', ", end="")
print(']')

输出:

['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n',
'SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n',
'MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n',
'PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']

【讨论】:

    【解决方案2】:

    一个建议是确保区分数据及其“表示”。 如果您希望每行只打印 6 个字符,则不再是数据本身如何存储的问题,而是正确表示信息的问题。

    考虑到这一点,最简单的方法是单独打印每一行数据。

    mylist = [['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
              ['SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
              ['MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n'],
              ['PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']]
    
    for row in mylist:
        print(" ".join(row))
    

    输出:

    UES9151GS5 SQU6245R DEN FRA 1420564460 1049
    
    SJD8775RZ4 SQU6245R DEN FRA 1420564460 1049
    
    MXU9187YC7 MOO1786A MAD FRA 1420563408 184
    
    PUD8209OG3 XXQ4064B JFK FRA 1420563917 802
    

    如果您注意到,末尾有一个额外的换行符,这是因为您的数据在每一行的最后一个字符串中都有它。您可以将其切掉以进行“快速修复”

    for row in mylist:
        print(" ".join(row)[:-1])
    #Output:
    UES9151GS5 SQU6245R DEN FRA 1420564460 1049
    SJD8775RZ4 SQU6245R DEN FRA 1420564460 1049
    MXU9187YC7 MOO1786A MAD FRA 1420563408 184
    PUD8209OG3 XXQ4064B JFK FRA 1420563917 802
    

    【讨论】:

      【解决方案3】:

      如果您只想合并两个列表,请使用原始列表并使用 extend() 将第二个列表附加到末尾:

      merged_list = mylist 
      merged_list.extend(second_list)
      

      【讨论】:

        【解决方案4】:

        你应该使用以下函数:

        def flatten(iterable):
            for item in iterable:
                try:
                    yield from flatten(item)
                except TypeError:
                    yield item
        

        如果您正在运行交互式解释器,您可以像这样使用它的修改版本:

        >>> def flatten(iterable):
            for item in iterable:
                if isinstance(item, str):
                    yield item
                else:
                    try:
                        yield from flatten(item)
                    except TypeError:
                        yield item
        
        
        >>> array_2D = [['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
         ['SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
         ['MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n'],
         ['PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']]
        >>> flat_array = list(flatten(array_2D))
        >>> flat_array
        ['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n', 'SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n', 'MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n', 'PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']
        >>> 
        

        【讨论】:

          【解决方案5】:

          将原来的嵌套数组解压成一个数组:

          a = [['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
               ['SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n'],
               ['MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n'],
               ['PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']]
          
          b = []
          for row in a:
              b += row
          

          结果:

          b = ['UES9151GS5', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n', 'SJD8775RZ4', 'SQU6245R', 'DEN', 'FRA', '1420564460', '1049\n', 'MXU9187YC7', 'MOO1786A', 'MAD', 'FRA', '1420563408', '184\n', 'PUD8209OG3', 'XXQ4064B', 'JFK', 'FRA', '1420563917', '802\n']
          

          如果要在每个包含“\n”的字符串后打印带有换行符的单个数组,则:

          print(*b)
          

          其中 splat (*) 表示可迭代解包。 (见https://docs.python.org/3/tutorial/controlflow.html#tut-unpacking-arguments

          【讨论】:

          • 可能需要解释一下,它相当于print(a, b, c),其中*解包列表。
          猜你喜欢
          • 2019-09-21
          • 2016-04-09
          • 1970-01-01
          • 2021-05-26
          • 2021-01-08
          • 2011-11-27
          • 2015-09-24
          • 1970-01-01
          • 2019-09-27
          相关资源
          最近更新 更多