как преобразовать следующий код в понимание списка

#python-3.x

#python-3.x

Вопрос:

Я написал код с использованием цикла for, я хочу, чтобы код был понятен для понимания списка.

 mainLst = [[2],[3],[4],[5],[6],[7],[8]]
lst2 = [[],[],[],[]]
const = 0
for i in range(4):
    k = const
    for j in range(4):
        lst2[const].append(mainLst[k][0])
        k  = 1
    const  = 1
print(lst2)
 

Ожидание приведенного выше кода в понимание списка.

Ответ №1:

Если вы хотите преобразовать только часть цикла и по-прежнему использовать mainLst переменную, то это будет выглядеть так:

 mainLst = [[2],[3],[4],[5],[6],[7],[8]]
lst2 = [[mainLst[j   k][0] for k in range(4)] for j in range(4)]
print(lst2)

# or if you still want to have initialized lst2 array, then:

lst2 = [[],[],[],[]]
[lst2[j].extend([mainLst[j   k][0] for k in range(4)]) for j in range(4)]
print(lst2)
 

Оба выводят одно и то же:

 [[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
 

Ответ №2:

Может быть выполнено без создания других переменных, таких как k и const

 lst2 = [[i for i in range(j, j   4)] for j in range(2, 6)]
 

Ответ №3:

Вы можете использовать оператор itemgetter with slice для получения фрагментов подсписков из списка и chain.from_iterable объединения подсписков в один список:

 from operator import itemgetter
from itertools import chain

mainLst = [[2],[3],[4],[5],[6],[7],[8]]

[list(chain.from_iterable(itemgetter(slice(i, i   4))(mainLst))) for i in range(4)]
# [[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]