Python преобразует список в многомерный список - PullRequest
0 голосов
/ 26 августа 2018

У меня есть список, который имеет разную длину в каждом измерении, как показано ниже:

list1=[[2,3,4],[1],[77,8,27,12],[25,15]]

, и у меня есть другой список с таким же количеством элементов, как:

list2=[a,b,c,d,e,f,g,h,i,j]

Я хочуизменить мой list2 как list1 и обработать два списка вместе в цикле for.

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Вот такой милый способ.

list1 = [[2,3,4],[1],[77,8,27,12],[25,15]]
list2 = list("abcdefghij")

list2_iterator = iter(list2)
list2_reshaped = [[next(list2_iterator) for _ in sublist] for sublist in list1]

print(list2_reshaped)

Out: [['a', 'b', 'c'], ['d'], ['e', 'f', 'g', 'h'], ['i', 'j']]

Я не знаю, возможно ли это с чистым пониманием.

0 голосов
/ 26 августа 2018

Если вы хотите обработать их в цикле, вы можете просто сделать это:

list1=[[2,3,4],[1],[77,8,27,12],[25,15]]

list2=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]

last = 0

for ele in list1:
    print(ele, list2[last : last + len(ele)])
    last += len(ele)

Результат:

([2, 3, 4], ['a', 'b', 'c'])
([1], ['d'])
([77, 8, 27, 12], ['e', 'f', 'g', 'h'])
([25, 15], ['i', 'j'])
0 голосов
/ 26 августа 2018

Свести список 1 в соответствие со списком 2 очень просто - либо просто используйте itertools.chain.from_iterable(list)), либо flat1 = [elem for sublist in list1 for elem in sublist], либо различные другие опции в этом вопросе .

Другой путь - этонемного сложнее.Но вместо того, чтобы искать однострочник, давайте просто сделаем это явно: создайте итератор для list2 и извлекайте из него элементы по мере необходимости:

def zipstructured(list1, list2):
    iter2 = iter(list2)
    for sublist1 in list1:
        sublist2 = list(itertools.islice(iter2, len(sublist1)))
        yield sublist1, sublist2

Теперь вы можете просто сделать это:

>>> list1=[[2,3,4],[1],[77,8,27,12],[25,15]]
>>> list2=['a','b','c','d','e','f','g','h','i','j']
>>> for sub1, sub2 in zipstructured(list1, list2):
...     print(sub1, sub2)
[2, 3, 4] ['a', 'b', 'c']
[1] ['d']
[77, 8, 27, 12] ['e', 'f', 'g', 'h']
[25, 15] ['i', 'j']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...