Все комбинации списка списков

Вы можете использовать stack, а затем str.extract.

(df.stack()
   .str.strip()
   .str.extract(r'(?P<Name>.*?)\s*\((?P<ID>.*?)\))
   .reset_index(drop=True))

     Name      ID
0   Jason  121439
1     Bob  127439
2     Jay  121596
3    Paul  123839
4   Molly  194439
5    Mark  136489
6     Ben   12589
7   Aaron  124159
8    Tina  114439
9   Tyler  121443
10   Toom  123586
11  Steve  161899
12   Jake  127859
13   John  126259
14   Josh  174859
15  Vince  179839
16    Amy  122579
17   Anna  174439
18     Al  121659
19    Ron  128379
209
задан Community 23 May 2017 в 01:54
поделиться

3 ответа

вам нужно itertools.product :

>>> import itertools
>>> a = [[1,2,3],[4,5,6],[7,8,9,10]]
>>> list(itertools.product(*a))
[(1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 4, 10), (1, 5, 7), (1, 5, 8), (1, 5, 9), (1, 5, 10), (1, 6, 7), (1, 6, 8), (1, 6, 9), (1, 6, 10), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 4, 10), (2, 5, 7), (2, 5, 8), (2, 5, 9), (2, 5, 10), (2, 6, 7), (2, 6, 8), (2, 6, 9), (2, 6, 10), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 4, 10), (3, 5, 7), (3, 5, 8), (3, 5, 9), (3, 5, 10), (3, 6, 7), (3, 6, 8), (3, 6, 9), (3, 6, 10)]
375
ответ дан 23 November 2019 в 04:38
поделиться

Самое элегантное решение - использовать itertools.product в python 2.6.

Если вы не используете Python 2.6, документы для itertools.product фактически показывают эквивалентную функцию для выполнения продукта «ручным» способом:

def product(*args, **kwds):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = map(tuple, args) * kwds.get('repeat', 1)
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)
23
ответ дан 23 November 2019 в 04:38
поделиться
listOLists = [[1,2,3],[4,5,6],[7,8,9,10]]
for list in itertools.product(*listOLists):
  print list;

Надеюсь, вы найдете это так же элегантно, как и я, когда впервые столкнулся с ним.

18
ответ дан 23 November 2019 в 04:38
поделиться
Другие вопросы по тегам:

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