Python 更好的条件列表

Python 更好的条件列表,python,list,loops,Python,List,Loops,我正在生成一个CSV文件,其中包含3列,另外还有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)

我正在生成一个CSV文件,其中包含3列,另外还有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)

我觉得自己被困在重复代码和多次迭代列表之间。正如你在上面所看到的,我似乎最终都做到了。有没有更好的方法可以在不重复多次列表的情况下执行此操作?

将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)
        ]

谢谢看起来像是我在找的。