В Python есть ли counter
во время понимания списка, как это было бы в случае цикла for
?
Было бы более понятно, почему мне нужен счетчик, в этом примере:
Я хочу добиться следующего:
Начальный список: ['p', 'q', 'r', 's']
Желаемый список: [(1, 'P'), (2, 'Q'), (3, 'R'), (4, 'S')]
В нужном списке первый элемент каждого кортежа - порядковые числа. Если бы это был просто плоский список, я мог бы использовать zip
для достижения этого. Но, однако, список, с которым я имею дело, является вложенным, трехуровневым (думаю, иерархические данные), и он генерируется посредством понимания списка.
Итак, мне было интересно, есть ли способ ввести эти порядковые числа во время понимания списка. Если нет, то какое наилучшее возможное решение.
P.S.: Здесь строчные буквы преобразуются в верхний регистр, но это не является частью проблемы, думайте об этом как о простом преобразовании данных.
код:
allObj = Category.objects.all()
tree =[(_, l1.name, [(__, l2.name, [(___, l3.name) for l3 in allObj if l3.parentid == l2.categoryid]) for l2 in allObj if l2.parentid == l1.categoryid]) for l1 in allObj if l1.parentid == None]
allObj
содержит данные из категории таблицы, которые, в свою очередь, содержат иерархические данные, представленные в виде списка привязанностей.
Я поставил _
, где мне нужны порядковые числа. Обратите внимание, что список вложен, так что на каждом уровне будет отдельный счетчик, представляемый 1, 2 и 3 _
s.