我正在制作一个包含3列的CSV文件,其中包含2个额外的可选列。我有一个函数,它将每个行存储为容器列表中的列表,我稍后可以迭代并生成csv。
import itertools as itt
def csvContainer(col1, col2, col3, col4=None, col5=None):
container = [
[c1, c2, c3] for c1, c2, c3 in
itt.izip(col1, col2, col3)
]
if col4:
for row, c4 in itt.izip(container, col4):
row.append(c4)
if col5:
for row, c5 in itt.izip(container, col5):
row.append(c5)
我不得不重复我的代码,或者不得不多次遍历列表。正如你在上面所看到的,我似乎最终都做到了。有没有更好的方法来实现这一点,而不是多次遍历列表?
答案 0 :(得分:0)
如果只是将col4和col5设置为默认空元组,然后使用izip_longest
?
def csvContainer(col1, col2, col3, col4=(), col5=()):
container = [
[x for x in items if x is not None] for items in
itt.izip_longest(col1, col2, col3, col4, col5)
]
(嵌套理解只是在没有额外列的情况下得到[1, 2, 3]
而不是[1, 2, 3, None, None]
。)
这也可以概括为:
def csvContainer(*cols):
container = [
[x for x in items if x is not None] for items in
itt.izip_longest(*cols)
]