为什么使用zip()只在列表包含内容时写入CSV文件?

时间:2016-01-18 18:25:04

标签: python csv zip zipfile

这是我第一次在这里提问,如果我没有正确地格式化问题,请提前道歉。我也没有很多使用python的经验。

我正在编写将两个列表写入CSV文件的代码。代码的目的是仅在列表包含某些内容时才将列表写入文件。

我一直在使用反复试验,但发现在python 3中使用ZIP时可以这样做:

with open('file.csv', 'a') as f:
    writer = csv.writer(f)
    writer.writerows(zip(x,y))
    f.close()

因此,如果xy都包含某些内容,则两个列表都会写入CSV文件。但是,如果x和/或y没有包含某些内容,则不会发生任何事情,这正是我希望代码能够正常工作的方式。

但是,我很难理解 为什么/如何使用ZIP可以实现这一点。

非常感谢。对不起,如果有什么不清楚的话。

1 个答案:

答案 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)]