Форум сайта python.su
0
Подскажите компактный код (трюк?), который строит прямое произведение списка с собой произвольное число раз.
Пример. Есть 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)) # ['+++', '-++', '--+', '---', '-+-', '+-+', '+--', '++-']
Отредактировано kvichans (Март 18, 2013 14:59:29)
Офлайн
25
print [''.join(i) for i in itertools.product('+-', repeat=3)] # -> ['+++', '++-', '+-+', '+--', '-++', '-+-', '--+', '---']
Отредактировано s0rg (Март 18, 2013 16:14:25)
Офлайн
857
>>> import itertools >>> list(map(''.join, itertools.product('+-', repeat=3))) ['+++', '++-', '+-+', '+--', '-++', '-+-', '--+', '---'] >>>
Офлайн
25
py.user.nextlist тут не нужен тогда.
py.user.next
Офлайн
0
Всем спасибо. Буду дальше учить матчасть
Офлайн
857
s0rgэто написано для третьего питона
list тут не нужен тогда.
Офлайн