【发布时间】:2016-05-19 23:58:39
【问题描述】:
我正在文件中进行字符串替换,并使用csv 编写器在输出中写入制表符。使用 csv 编写器意味着我需要一个格式正确的列表来提供给 csv 编写器进行输出。我采用一行输入来指定制表符和换行符,并将其放入 csv 编写器知道如何写出的列表中。
我有下面的代码,它实际上完成了所需的任务,我想知道的是,是否可以使用 for 循环上的列表理解进一步细化该代码,以将选项卡分解为它们自己的列表并替换现有项目列表。代码如下:
testInput = "\\t//blah/...\\t//blah_blah/...\\n\\t-//blah/...\\t//blah/...\\n\\t//blah/...\\t//blah_blah/...\\n\\t//blah/...\\t//blah/...\\n"
new_lines = [z for z in testInput.split('\\n') if z]
x=-1
if testInput.find("\\t") >= 0:
for line in new_lines:
x+=1
lines = line.split("\\t")
new_lines[x] = lines
replacement_value = new_lines
使用此代码,for 循环将 new_lines 转换为:
到这里:
可以使用列表理解重写 for 循环吗?
【问题讨论】:
-
你真的应该把这个发到codereview.stackexchange.com
-
我很困惑。你说的这个“csv writer”是什么?我在您的代码中没有看到任何内容。
-
您是否有某种原因需要列表理解?在您的情况下,您拥有的
for循环将产生更好的性能:您的迭代。 -
@Daniel:会吗?通常,列表推导会击败等效的
for循环(并非总是如此,但经常如此)。for循环可以使用enumerate而不是手动调整的索引值 (for x, line in enumerate(new_lines):) 加速,但如果它从一开始就创建正确的list而不是创建一个list行,然后将所有条目转换为lists 字段。 -
@ShadowRanger 是的;在这里创建正确的
list最初会为性能创造奇迹。我试图强调一个事实,即列表组合在所有情况下都不是性能的灵丹妙药。我想如果他们真的想获得技术,OP 可以timeit每种方法:)
标签: python list csv list-comprehension