Есть ли в Python какой-либо счетчик
, доступный во время понимания списка, как это было бы в случае цикла 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.