2015-02-16 3 views
1

Допустим, у меня есть список, подобный этому.Цитирование по списку со строками разной длины

a = [1, 23, 456, 6789] 

И я хочу изменить положение элементов в каждой позиции списка. Выход был бы, каждое число перемещается на одну позицию до конца строки и перемещается в начало строки.

E.g.

1, 23, 32, 456, 645, 564, 6789, 9678, 8967, 7896 

Я знаю, как сделать это с одним номером или строки с фиксированной длиной, но когда строка сохраняет изменения длины я не знаю, что делать.

Вот что у меня есть до сих пор, но до сих пор я получаю op на вызываемых отдельных элементах строки - например, число 4 - внутри строки - 564 - уже в списке.

for i in a: 
    for j in len(i): 
    print a[len(i)-j] 

* Редактировать *

Woops, отправил это слишком рано. Окончательная версия выше.

+1

Неясно, как входные карты на выходе. Пожалуйста, перепишите свой вопрос ... –

+0

что непонятно? – ely

+0

Я отправил его слишком рано, поэтому мой вопрос не имел бы смысла. Сожалею. – Chef1075

ответ

3
a = [1, 23, 456, 6789] 
for i in map(str, a): 
    for j in range(len(i)): 
    print(i[j:]+i[:j]) 

Встроенная функция map документирована на python.org.

Если порядок чисел имеет отношение, то сделать:

import itertools 
a = [1, 23, 456, 6789] 
for i in map(str, a): 
    for j in itertools.chain(range(1),range(len(i)-1,0,-1)): 
    print(i[j:]+i[:j]) 

Функция chain встроенного модуля itertools документирована на python.org. Вы также можете сделать это без itertools.chain(), но это первое, что появилось у меня в голове.

+1

Спасибо :) последняя строка действительно все объясняет! – Chef1075

1

Вы можете это сделать - как вы указываете в своем вопросе - цикл над строкой n раз, с n длина строки. Однако вы должны сначала преобразовать число в целое число.

Кроме того, нужно определить поворота операцию, которая помещает конец строки на вершине, вы можете сделать это так:

def rotate (s) : 
    n = len(s) 
    return s[n-1:n]+s[0:n-1] 

Тогда вы просто перебрать все числа, преобразовывать их в строку , и повторить n время - с n длина строки - функция печати и поворота.

for i in a: 
    si = str(i) 
    for j in range(0,len(si)): 
    print si 
    si = rotate(si) 
2
def rotationsHelper(s, n): 
    return [] if n <= 0 else [s] + rotationsHelper(s[-1] + s[:-1], n-1) 

def rotations(s): 
    return rotationsHelper(s, len(s)) 

def rotateIntList(int_list): 
    if int_list == []: 
     return [] 
    return map(int, rotations(str(int_list[0]))) + rotateIntList(int_list[1:]) 

затем

In [23]: rotateIntList(a) 
Out[23]: [1, 23, 32, 456, 645, 564, 6789, 9678, 8967, 7896] 
Смежные вопросы