这是我第一次在这里提问,如果我没有正确地格式化问题,请提前道歉。我也没有很多使用python的经验。
我正在编写将两个列表写入CSV文件的代码。代码的目的是仅在列表包含某些内容时才将列表写入文件。
我一直在使用反复试验,但发现在python 3中使用ZIP
时可以这样做:
with open('file.csv', 'a') as f:
writer = csv.writer(f)
writer.writerows(zip(x,y))
f.close()
因此,如果x
和y
都包含某些内容,则两个列表都会写入CSV文件。但是,如果x
和/或y
没有包含某些内容,则不会发生任何事情,这正是我希望代码能够正常工作的方式。
但是,我很难理解 为什么/如何使用ZIP
可以实现这一点。
非常感谢。对不起,如果有什么不清楚的话。
答案 0 :(得分:1)
zip
使用最短的序列。来自文档:
zip([iterable, ...])
返回的列表的长度被截断为最短参数序列的长度。
所以,如果你有一个空序列,你什么也得不到:
>>> some = [1, 2, 3]
>>> empty = []
>>> zip(some, empty)
[]
如果要使用最长的序列,请使用itertools.izip_longest
。默认情况下,它会为None
填写缺失值,或者您可以指定新的fillvalue
:
itertools.izip_longest(*iterables[, fillvalue])
如果迭代的长度不均匀,则使用fillvalue填充缺失值。迭代继续,直到最长的可迭代耗尽
>>> from itertools import izip_longest
>>> some = [1, 2, 3]
>>> shorter = ['a', 'b']
>>> list(izip_longest(some, shorter))
[(1, 'a'), (2, 'b'), (3, None)]