Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2014 01:19:45

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Итерировать все элементы списка?

Добрый день! Есть список вида

[
     [
        ['способ','способа','способу','способы'],['изготовления'],['продукта','продуктов']
                                                                                  ],
     [
        ['метод','методы','методов'],['доставки','доставок'],['товара','товаров']
                                                                                 ]
                                                                                                 ]
Я хочу пройтись по всем подспискам и получить все возможные комбинации так, чтобы получилось

[
    ['способ','изготовления','продукта'],
    ['способа','изготовления','продукта'],
    ['способу','изготовления','продукта'],
    ['способ','изготовления','продуктов'],
    ['способы','изготовления','продукта'],
    ...
    ['методов','доставки','товаров']   ]

Как это реализовать?

Отредактировано vanvanov (Ноя. 18, 2014 01:45:20)

Офлайн

#2 Ноя. 18, 2014 06:01:31

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Итерировать все элементы списка?

модуль itertools метод product:

>>> a='qwe'
>>> b='123'
>>> c='!@#'
>>> >>> for i in itertools.product(a,b,c):
...     print i
...
('q', '1', '!')
('q', '1', '@')
('q', '1', '#')
('q', '2', '!')
('q', '2', '@')
('q', '2', '#')
....

Добавлю: на счет порядка изменения словоформ надо подумать



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Ноя. 18, 2014 06:08:34)

Офлайн

#3 Ноя. 18, 2014 19:52:45

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Итерировать все элементы списка?

def magic(a, i, j):
    jj = 1
    for k in xrange(i+1, len(a)):
        jj *= len(a[k])
    return a[i][j/jj%len(a[i])]
a = [[['00','01','02','03'],['10'],['20','21']],
     [['30','31','32'],['40','41'],['42','43','44']]]
b = []
for i in a:
    l = 1
    for j in i:
        l *= len(j)
    for j in xrange(l):
        b.append([magic(i, k, j) for k in range(len(i))])
[['00', '10', '20'], 
['00', '10', '21'], 
['01', '10', '20'], 
['01', '10', '21'], 
['02', '10', '20'], 
['02', '10', '21'], 
['03', '10', '20'], 
['03', '10', '21'], 
['30', '40', '42'], 
['30', '40', '43'], 
['30', '40', '44'], 
['30', '41', '42'], 
['30', '41', '43'], 
['30', '41', '44'], 
['31', '40', '42'], 
['31', '40', '43'], 
['31', '40', '44'], 
['31', '41', '42'], 
['31', '41', '43'], 
['31', '41', '44'], 
['32', '40', '42'], 
['32', '40', '43'], 
['32', '40', '44'], 
['32', '41', '42'], 
['32', '41', '43'], 
['32', '41', '44']]



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version