Найти - Пользователи
Полная версия: Как сгенерировать степень списка
Начало » Python для новичков » Как сгенерировать степень списка
1
kvichans
Подскажите компактный код (трюк?), который строит прямое произведение списка с собой произвольное число раз.
Пример. Есть 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)) # ['+++', '-++', '--+', '---', '-+-', '+-+', '+--', '++-']
s0rg
print [''.join(i) for i in itertools.product('+-', repeat=3)] # -> ['+++', '++-', '+-+', '+--', '-++', '-+-', '--+', '---']
py.user.next
>>> import itertools
>>> list(map(''.join, itertools.product('+-', repeat=3)))
['+++', '++-', '+-+', '+--', '-++', '-+-', '--+', '---']
>>>
s0rg
py.user.next
py.user.next
list тут не нужен тогда.
kvichans
Всем спасибо. Буду дальше учить матчасть
py.user.next
s0rg
list тут не нужен тогда.
это написано для третьего питона
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB