В этом ответе используется тот же метод в ответе @ Аарона Дигуллы, с чуть более питоническим синтаксисом. Это может облегчить понимание некоторых из приведенных выше ответов.
>>> for a,b,c in zip(foolist[::3],foolist[1::3],foolist[2::3]):
>>> print '{:<30}{:<30}{:<}'.format(a,b,c)
exiv2-devel mingw-libs tcltk-demos
fcgi netcdf pdcurses-devel
msvcrt gdal-grass iconv
qgis-devel qgis1.1 php_mapscript
Это можно легко адаптировать к любому количеству столбцов или переменных столбцов, что приведет к чему-то вроде ответа от @gnibbler. Интервал можно регулировать по ширине экрана.
Обновление: объяснение по запросу.
Индексация
foolist[::3]
выбирает каждый третий элемент foolist
. foolist[1::3]
выбирает каждый третий элемент, начиная со второго («1», потому что python использует нулевую индексацию).
In [2]: bar = [1,2,3,4,5,6,7,8,9]
In [3]: bar[::3]
Out[3]: [1, 4, 7]
молния
Сжатие списков (или других итераций) генерирует кортежи элементов списков. Например:
In [5]: zip([1,2,3],['a','b','c'],['x','y','z'])
Out[5]: [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
вместе
Объединяя эти идеи, мы получаем наше решение:
for a,b,c in zip(foolist[::3],foolist[1::3],foolist[2::3]):
Здесь мы сначала генерируем три "среза" foolist
, каждый из которых проиндексирован каждым третьим элементом и смещен на единицу. Каждый из них по отдельности содержит только треть списка. Теперь, когда мы сжимаем эти фрагменты и повторяем, каждая итерация дает нам три элемента foolist
.
Что мы и хотели:
In [11]: for a,b,c in zip(foolist[::3],foolist[1::3],foolist[2::3]):
....: print a,b,c
Out[11]: exiv2-devel mingw-libs tcltk-demos
fcgi netcdf pdcurses-devel
[etc]
Вместо:
In [12]: for a in foolist:
....: print a
Out[12]: exiv2-devel
mingw-libs
[etc]