Python 更好的条件列表
我正在生成一个CSV文件,其中包含3列,另外还有2列可选列。我有一个函数,它将每一行存储为容器列表中的列表,稍后我可以迭代并生成csvPython 更好的条件列表,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)
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)
]
谢谢看起来像是我在找的。