Все эти методы работают в Python 2 или 3. И они работают с "рваными" прямоугольными 2D-списками.То есть внутренние списки не должны иметь одинаковую длину.
настройка
import itertools
import six
list_list = [[1,2,3], [4,5,6, 6.1, 6.2, 6.3], [7,8,9]]
метод 1
>>> map(list, six.moves.zip_longest(*list_list, fillvalue='-'))
[[1, 4, 7], [2, 5, 8], [3, 6, 9], ['-', 6.1, '-'], ['-', 6.2, '-'], ['-', 6.3, '-']]
six.moves.zip_longest()
становится
Значение заполнения по умолчанию:None
.Благодаря ответу @ jena , где map()
меняет внутренние кортежи на списки.Здесь он превращает итераторы в списки.Благодаря комментариям @ Oregano и @ badp's .
метод 2
>>> [list(row) for row in six.moves.zip_longest(*list_list, fillvalue='-')]
[[1, 4, 7], [2, 5, 8], [3, 6, 9], ['-', 6.1, '-'], ['-', 6.2, '-'], ['-', 6.3, '-']]
Альтернатива @ inspectorG4dget .
метод 3
>>> map(list, map(None, *list_list))
[[1, 4, 7], [2, 5, 8], [3, 6, 9], [None, 6.1, None], [None, 6.2, None], [None, 6.3, None]]
Этот чрезвычайно компактный @ SiggyF второй вариант работает с рваными 2D-списками, в отличие от его первого кода, который использует numpy transpose и проходит через рваные списки.Но None не должно быть значением заполнения.(Нет, значение None, переданное внутренней карте (), не является значением заполнения. Это означает, что нет функции для передачи строк.)