【问题标题】:zip_longest on Array with lists of the same length. Understanding具有相同长度列表的 Array 上的 zip_longest。理解
【发布时间】:2018-09-01 03:36:44
【问题描述】:

我有一个数组,其中包含几个长度相同的列表。所有这些列表都需要写入 .csv 文件。使用一段代码我发现它工作得很好。代码如下:

ag=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

export_data = zip_longest(*ag, fillvalue = '') 

with open('motion_profile.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
    wr = csv.writer(myfile, delimiter=',')
    wr.writerow(("m","ax","ay","az","sx","sy","sz"))
    wr.writerows(export_data)  
myfile.close()

当我有两个使用它的数组时,我了解zipzip_longest 的基本概念。但是我无法理解它对单个数组的作用,例如export_data = zip_longest(*ag, fillvalue = '')

如果我在上面使用zipzip_longestag 到底会发生什么?

既然我没有两个数组,它会压缩什么?

zip_longest 被应用于ag 中的每个列表,因此*。这就是我所取得的成就。

有人能帮我看看吗?

【问题讨论】:

    标签: python python-3.x itertools splat


    【解决方案1】:

    zip()不一定需要两个数组;它需要任意数量的数组(可迭代)as positional arguments

    采取更小的步骤,

    • *ag 解压缩嵌套列表。请注意,它只解包“向下一层”。您实际上只剩下 4 个列表,[1, 2, 3],...[10, 11, 12],作为将成为位置参数的不同元素。
    • 从那里,zip() 的行为与预期一样(您向它传递了多个解压缩列表)。

    你可以看到等价:

    >>> i, j, k = zip(*ag)
    
    >>> i
    (1, 4, 7, 10)
    >>> k
    (3, 6, 9, 12)
    
    >>> i2, j2, k2 = zip([1,2,3],[4,5,6],[7,8,9],[10,11,12])
                    #     |_______|_______|________|
                    #                 i2
    
    >>> i2
    (1, 4, 7, 10)
    >>> k2
    (3, 6, 9, 12)
    

    换句话说,这四个子列表作为四个位置参数传递给zip()

    在调用语法方面,itertools.zip_longest(*iterables, fillvalue=None) 非常相似;它只是在末尾添加了一个关键字参数。子列表的传递方式实际上是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2014-07-04
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多