我有一个数组,其中包含几个长度相同的列表。所有这些列表都需要用.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 = '')
ag
如果我使用zip
或zip_longest
会发生什么?
因为我没有两个阵列,所以它会拉链?
zip_longest
正在应用于ag
中的每个列表,因此*
。那是我走了多远。
有人能指引我吗?
答案 0 :(得分:2)
zip()
不一定需要两个数组;它需要任意数量的数组(iterables)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)
非常相似;它只有一个关键字参数被添加到最后。子列表的传递方式实际上是相同的。