更好的条件清单

时间:2013-12-05 06:26:09

标签: python list loops

我正在制作一个包含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)

我不得不重复我的代码,或者不得不多次遍历列表。正如你在上面所看到的,我似乎最终都做到了。有没有更好的方法来实现这一点,而不是多次遍历列表?

1 个答案:

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