Задать вопрос

Python. Как реализовать цикл внутри вложенного списка?

Приветствую. Не знал, как правильнее сформулировать вопрос, суть задачи вот в чем, есть вложенный список:
list = [
   ['aa1','aa2'],
   ['bb1','bb2','bb3'],
   ['cc1','cc2','cc3','cc4',],
       ]

Как мне реализовать что-то наподобие такого, не зная при этом размер самого списка:
for a in list[0]:
   for b in list[1]:
      for c in list[2]:
         <что-то делаем>

То есть, мне надо пройтись каждым элементом списка по всем следующим вложенным элементам этого же списка, при этом общий размер списка может быть разным... Надеюсь, задал вопрос корректно, благодарю заранее)
  • Вопрос задан
  • 5393 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@throughtheether
human after all
Если я вас правильно понял, то так:
import itertools
lst = [
   ['aa1','aa2'],
   ['bb1','bb2','bb3'],
   ['cc1','cc2','cc3','cc4',],
       ]
for item in itertools.product(*lst):
        # do stuff
        print item

Результат:
>>> 
('aa1', 'bb1', 'cc1')
('aa1', 'bb1', 'cc2')
('aa1', 'bb1', 'cc3')
('aa1', 'bb1', 'cc4')
('aa1', 'bb2', 'cc1')
('aa1', 'bb2', 'cc2')
('aa1', 'bb2', 'cc3')
('aa1', 'bb2', 'cc4')
('aa1', 'bb3', 'cc1')
('aa1', 'bb3', 'cc2')
('aa1', 'bb3', 'cc3')
('aa1', 'bb3', 'cc4')
('aa2', 'bb1', 'cc1')
('aa2', 'bb1', 'cc2')
('aa2', 'bb1', 'cc3')
('aa2', 'bb1', 'cc4')
('aa2', 'bb2', 'cc1')
('aa2', 'bb2', 'cc2')
('aa2', 'bb2', 'cc3')
('aa2', 'bb2', 'cc4')
('aa2', 'bb3', 'cc1')
('aa2', 'bb3', 'cc2')
('aa2', 'bb3', 'cc3')
('aa2', 'bb3', 'cc4')
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Ska1n Автор вопроса
Нагуглил небольшое решение в таком виде:
print [(x,y) for x in list[0] for y in list[1]]
>> [('aa1', 'bb1'), ('aa1', 'bb2'), ('aa1', 'bb3'), ('aa2', 'bb1'), ('aa2', 'bb2'), ('aa2', 'bb3')]

То, что надо, но есть одно но- как мне теперь подобное реализовать на динамичность, так сказать? Ведь в данном примере я прохожусь только по 0 и 1 индексу списка, а их может быть и 3 и 5...
Ответ написан
Комментировать
@lPolar
data scientist
Первое - называть системными именами (list) переменные не есть комильфо.
Если Вам необходимо работать со списками списков и индексировать их, доставать различные срезы, то pure python списки являются не самыми удобными структурами данных.
На мой взгляд, тут есть несколько вариантов.
1. pyre python через словари:
tab={'a1':['aa1','aa2'],
     'b1':['bb1','bb2','bb3'],
     'c1':['cc1','cc2','cc3','cc4',]}
for key in tab:
    row=tab[key]
    for el in row:
        print(el)

2. Через pandas DataFrame - очень удобные структуры для срезов/операций по колонкам/строкам
import pandas as pd
l = [
   ['aa1','aa2'],
   ['bb1','bb2','bb3'],
   ['cc1','cc2','cc3','cc4',],
       ]
df=pd.DataFrame(l)
print(df)
#Выведет
     0    1     2     3
0  aa1  aa2  None  None
1  bb1  bb2   bb3  None
2  cc1  cc2   cc3   cc4

Тут можно доставать срезы по одной или двум осям:
print(df[0])
#Выведет
0    aa1
1    bb1
2    cc1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы