Я выполняю замену строк в файле и использую средство записи 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 for преобразует new_lines из этого:
К этому:
Можно ли переписать цикл for с использованием понимания списка?
map
иfilter
для переноса работы на уровень C в CPython:from operator import methodcaller
,map(methodcaller('split', '\\t'), filter(None, testInput.split('\\n')))
; если на Py3 и вам нуженlist
изlist
s, а не генераторlist
s, оберните вызовmap
вlist
. :-) 20.05.2016