Как создавать новые списки в Python - PullRequest
0 голосов
/ 20 октября 2019

Я хочу создать новые списки из одного списка. Вот пример списка, над которым я работаю:

matrixlist = [['Matrix', '1'], ['1', '4', '6'], ['5', '2', '9'], ['Matrix', '2'], ['2', '6'], ['1', '3'], ['8', '6'], ['Matrix', '3'], ['5', '6', '7', '9'], ['1', '4', '2', '3'], ['8', '7', '3', '5'], ['9', '4', '5', '3'], ['Matrix', '4'], ['7', '8'], ['4', '6'], ['2', '3']]

Я разделил их следующим образом с циклом for:

matrix1 = [['1', '4', '6'], ['5', '2', '9']]
matrix2 = [['2', '6'], ['1', '3'], ['8', '6']]
matrix3 = [['5', '6', '7', '9'], ['1', '4', '2', '3'], ['8', '7', '3', '5'], ['9', '4', '5', '3']]
matrix4 = [['7', '8'], ['4', '6'], ['2', '3']]

Но я хочу дать длинный список программе, и он создает спискии добавить соответствующие элементы в нем. Как и элементы матрицы 1 в списке матрицы 1.

Редактировать: я не могу использовать какие-либо дополнительные встроенные функции. Я могу использовать только простые (такие как append, pop, reverse, range) и мои функции в коде.

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Вы можете использовать itertools.groupby:

from itertools import groupby
matrixlist = [['Matrix', '1'], ['1', '4', '6'], ['5', '2', '9'], ['Matrix', '2'], ['2', '6'], ['1', '3'], ['8', '6'], ['Matrix', '3'], ['5', '6', '7', '9'], ['1', '4', '2', '3'], ['8', '7', '3', '5'], ['9', '4', '5', '3'], ['Matrix', '4'], ['7', '8'], ['4', '6'], ['2', '3']]
result = [list(b) for a, b in groupby(matrixlist, key=lambda x:x[0] == 'Matrix') if not a]

Выход:

[[['1', '4', '6'], ['5', '2', '9']], 
 [['2', '6'], ['1', '3'], ['8', '6']], 
 [['5', '6', '7', '9'], ['1', '4', '2', '3'], ['8', '7', '3', '5'], ['9', '4', '5', '3']], 
 [['7', '8'], ['4', '6'], ['2', '3']]]
0 голосов
/ 20 октября 2019

Вы можете сделать это, используя понимание списка, как показано ниже

indx = [i  for i, mat in enumerate(matrixlist )if mat[0]=='Matrix']

matrixes = {matrixlist[i][1]: matrixlist[i+1: j] for i, j in zip(indx, indx[1:])}

# access matrix with its id
matrixes["1"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...