Уведомления

Группа в Telegram: @pythonsu

#1 Март 18, 2013 14:57:40

kvichans
От: Москва
Зарегистрирован: 2013-03-07
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сгенерировать степень списка

Подскажите компактный код (трюк?), который строит прямое произведение списка с собой произвольное число раз.
Пример. Есть chars ('+','-') и N=10, нужно получить chars**N, то есть список длины 2**N всех строк длины N из указнанных символов. (Строки и списки символов можно не различать)

Пока знаю только громозкий способ через рекурсивную функцию:

def gen_list_pow(chars, N):
  ans=[]
  line=chars[0]*N
  ans.append(line)
  rcrs(line, ans, chars)
  return ans
def rcrs(line, ans, chars):
  for p in range(len(line)):
    if line[p]==chars[0]:
      newline=line[:p]+chars[1]+line[p+1:]
      if newline in ans: continue
      ans.append(newline)
      rcrs(newline, ans, chars)
print(gen_list_pow('+-',3)) # ['+++', '-++', '--+', '---', '-+-', '+-+', '+--', '++-']



Py3.3x32, Py3.3x64, Win7x64-HmEx-ru(1600x900), TC8.0x32, SynWrite 5.8

Отредактировано kvichans (Март 18, 2013 14:59:29)

Офлайн

#2 Март 18, 2013 16:14:04

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Как сгенерировать степень списка

print [''.join(i) for i in itertools.product('+-', repeat=3)] # -> ['+++', '++-', '+-+', '+--', '-++', '-+-', '--+', '---']

Отредактировано s0rg (Март 18, 2013 16:14:25)

Офлайн

#3 Март 18, 2013 16:36:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Как сгенерировать степень списка

>>> import itertools
>>> list(map(''.join, itertools.product('+-', repeat=3)))
['+++', '++-', '+-+', '+--', '-++', '-+-', '--+', '---']
>>>



Офлайн

#4 Март 18, 2013 16:41:57

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Как сгенерировать степень списка

py.user.next
py.user.next
list тут не нужен тогда.

Офлайн

#5 Март 18, 2013 17:54:00

kvichans
От: Москва
Зарегистрирован: 2013-03-07
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сгенерировать степень списка

Всем спасибо. Буду дальше учить матчасть



Py3.3x32, Py3.3x64, Win7x64-HmEx-ru(1600x900), TC8.0x32, SynWrite 5.8

Офлайн

#6 Март 18, 2013 21:43:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Как сгенерировать степень списка

s0rg
list тут не нужен тогда.
это написано для третьего питона



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version