zip_longest 在具有相同长度列表的数组上。理解
zip_longest on Array with lists of the same length. Understanding
我有一个数组,其中包含一些长度相同的列表。所有这些列表都需要写在一个 .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()
当我有两个数组时,我理解 zip
和 zip_longest
的基本概念。但是我只是无法理解它对像这里这样的单个数组所做的事情 export_data = zip_longest(*ag, fillvalue = '')
如果我在其上使用 zip
或 zip_longest
,ag
究竟会发生什么?
因为我没有两个数组,它压缩什么?
zip_longest
应用于 ag
中的每个列表,因此 *
。这就是我得到的结果。
谁能帮我解决这个问题?
zip()
不一定取两个数组;它需要任意数量的数组(可迭代)as positional arguments.
循序渐进,
*ag
解压嵌套列表。请注意,它只解压缩 "one level down." 你实际上剩下 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)
换句话说,这四个 sub-lists 作为四个位置参数传递给 zip()
。
在调用语法方面,itertools.zip_longest(*iterables, fillvalue=None)
非常相似;它只有一个关键字参数附加到最后。 sub-lists 的传递方式实际上是相同的。
我有一个数组,其中包含一些长度相同的列表。所有这些列表都需要写在一个 .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()
当我有两个数组时,我理解 zip
和 zip_longest
的基本概念。但是我只是无法理解它对像这里这样的单个数组所做的事情 export_data = zip_longest(*ag, fillvalue = '')
如果我在其上使用 zip
或 zip_longest
,ag
究竟会发生什么?
因为我没有两个数组,它压缩什么?
zip_longest
应用于 ag
中的每个列表,因此 *
。这就是我得到的结果。
谁能帮我解决这个问题?
zip()
不一定取两个数组;它需要任意数量的数组(可迭代)as positional arguments.
循序渐进,
*ag
解压嵌套列表。请注意,它只解压缩 "one level down." 你实际上剩下 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)
换句话说,这四个 sub-lists 作为四个位置参数传递给 zip()
。
在调用语法方面,itertools.zip_longest(*iterables, fillvalue=None)
非常相似;它只有一个关键字参数附加到最后。 sub-lists 的传递方式实际上是相同的。