2014-04-14 3 views
2

Я хочу, чтобы python сгенерировал список [['A', 'B', 'C']], а затем добавьте другой список, так что это [['A', 'B', 'C'], ['B', 'C', 'A']] и продолжайте, пока он не будет завершен. Я уже давно работаю с python, но не могу найти способ сделать это. Любая помощь будет приятной.Создать список смещения python

Я попытался for петли:

x = list("ABCDEFGHIJ...") 
for i in range(0,55): 
    for j in range(0,55): 
     y = (j+55) - (i+55) 
     list[i][j] = x[y] 

так что да, спасибо за любую помощь.

+1

Я понятия не имею, что вы пытаетесь выполнить. Вы пытаетесь получить все перестановки 'list ('abc')'? Если это так, 'itertools.permutations' - ваш друг. –

+1

Я думаю, что он рассматривает исходный список как кольцо. – 2rs2ts

+1

@ 2rs2ts ах-ха! Вы можете быть правы :) Если да, то ответ g.d.d.c совершенен. –

ответ

0

Если вы просто пытаетесь добавить повернутый список, вот как к этому:

>>> x=[] 
>>> x.append(list('ABC')) 
>>> x 
[['A', 'B', 'C']] 
>>> x.append(x[-1][1:]+x[-1][:1]) 
>>> x 
[['A', 'B', 'C'], ['B', 'C', 'A']] 

Что вы можете продолжить:

>>> x.append(x[-1][1:]+x[-1][:1]) 
>>> x 
[['A', 'B', 'C'], ['B', 'C', 'A'], ['C', 'A', 'B']] 

И когда вы говорите «продолжайте до конца», вы можете иметь в виду что-то вроде этого ?:

x=[list('ABCD')] 

def rotate(l,n): 
    return l[n:] + l[:n] 

while True: 
    rl=rotate(x[-1], 1) 
    if len(x)>1 and x[0]==rl: 
     break 
    else:  
     x.append(rl) 

print x  
# [['A', 'B', 'C', 'D'], ['B', 'C', 'D', 'A'], ['C', 'D', 'A', 'B'], ['D', 'A', 'B', 'C']] 
5

Вы могли бы искать функциональности в deque

>>> from collections import deque 
>>> d = deque('ABC') 
>>> d 
deque(['A', 'B', 'C']) 
>>> d.rotate(-1) 
>>> d 
deque(['B', 'C', 'A']) 
+0

Ответ на этот ответ: чтобы получить желаемый результат (список поворотов «ABC»), вы можете сделать это: 'x =" ABC "; L = [x]; d = deque (x); для y в диапазоне (len (x) -1): d.ротат (-1); L.append (список (г)) ' –

Смежные вопросы