Как уже указывалось многими, itertools.chain()
- это путь, если нужно применить точно такой же режим к обоим спискам. В моем случае у меня был ярлык и флаг, которые отличались от одного списка к другому, поэтому мне нужно было что-то немного более сложное. Оказывается, за кадром itertools.chain()
просто делает следующее:
for it in iterables:
for element in it:
yield element
(см. https://docs.python.org/2/library/itertools.html),, поэтому я черпал вдохновение и написал что-то вроде этого:
for iterable, header, flag in ( (newList, 'New', ''), (modList, 'Modified', '-f')):
print header + ':'
for path in iterable:
[...]
command = 'cp -r' if os.path.isdir(srcPath) else 'cp'
print >> SCRIPT , command, flag, srcPath, mergedDirPath
[...]
Основные моменты, которые необходимо понять, заключаются в том, что списки - это просто частный случай итерации, которые являются объектами, подобными любым другим; и что циклы for ... in
в python могут работать с переменными кортежей, поэтому можно легко зацикливать несколько переменных одновременно.