Учитывая список списков, в которых количество списков и количество элементов внутри переменной. Например:Как получить плоский список индексов в список списков?
import random
import string
bar = lambda: [random.choice(string.ascii_letters) for _ in range(random.randint(1,5))]
branches = [bar() for _ in range(4)]
>>> branches
[['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
мне интересно, если есть более емкий способ создать список кортежей, которые индекс списка. Что-то более кратким, чем это:
nodes = []
for branch in range(len(branches)):
for node in range(len(branches[branch])):
nodes.append((branch, node))
>>> nodes
[(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
Не удалось ли это сделать со списком? У меня просто есть проблемы с гвоздями, и я уверен, что там есть бриниак с большим молотом.
Конечной целью является случайное посещение каждого узла один раз и только один раз и во время посещения, чтобы точно знать, где находится текущий узел в великой схеме вещей. Поэтому я перетасовываю результат random.shuffle(nodes)
и перебираю его, используя кортеж, чтобы получить доступ к исходному списку через branches[node[0]][node[1]]
. Лучшие идеи приветствуются.
Вложенный цикл может быть записан как понимание списка: '[(b ранчо, узел) для ветви в диапазоне (len (ветви)) для узла в диапазоне (len (branch [branch]))]. –