2015-10-20 2 views
1

Это похоже на легкую задачу, и я честно не знаю, в чем проблема. У меня есть список, такой как [0,1,2,3,4,5,6] и такой, и мне нужно выбрать и индексировать, скажем 3, а выход должен выглядеть как [4,5,6,3, 0,1,2] и вот мой кодРабота со списками и нарезкой

def cut_list(listA, index): 
    return listA[index+1:] + listA[index] + listA[0:index] 

однако функция lišta [индекс] не работает должным образом и дает ошибку, однако, если я беру другие части и делать только «возвращение lišta [ index] "будет выводиться 3

+1

«давая ошибку» - Какая ошибка? – mgilson

+2

'return listA [index + 1:] + [listA [index]] + listA [0: index]' – inspectorG4dget

ответ

3

listA[index] - скалярное значение, которое не может быть объединено со списком. Вы делаете что-то похожее на:

>>> 3 + [] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'int' and 'list' 

Списки могут быть объединены только с другими списками, поэтому решение должно просто изменить listA[index] в список с тем, что в качестве единственного элемента. например [listA[index]]:

def cut_list(listA, index): 
    return listA[index+1:] + [listA[index]] + listA[0:index] 

Чтобы заставить его работать на типов наиболее последовательности, мы можем сделать немного умную нарезку:

def cut_list(listA, index): 
    return listA[index+1:] + listA[index:index+1] + listA[0:index] 

Это работает, потому что ломтик x[idx:idx+1]должен вернуть последовательность того же типа, что и x, который имеет только элемент idx'th от x.

>>> cut_list(range(10), 3) 
[4, 5, 6, 7, 8, 9, 3, 0, 1, 2] 
>>> cut_list('foo3bar', 3) 
'bar3foo' 
>>> cut_list(tuple(range(10)), 3) 
(4, 5, 6, 7, 8, 9, 3, 0, 1, 2) 
+0

Это будет работать, но я забыл упомянуть, что он должен работать только для строки, если я использовал() вместо [], он работает для строки, но не для списка, и наоборот –

+0

@HelloMellow - я обновил решение, которое должно работать для большинства типов последовательностей. – mgilson

+0

Он работает, спасибо! Но почему это делает, что listA [index: index + 1] не возникает, в этом случае печатается третий (как индекс = 3) и 4-й (индекс + 1 = 3 + 1 = 4) член? –

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