2016-11-10 2 views
7

Я хочу написать код так:Как я могу использовать двоеточие (:) в переменной

index = 0:2 
print(list[index]) 

, но это не работает.

Есть ли способ сохранить все части синтаксиса [...:...] в переменной?

+5

Нет, вы не можете. Это недействительный синтаксис Python. –

+0

Нет, в Python его невозможно сделать для целых чисел/поплавков. Вы можете использовать их для строки (Ex: index = "0: 2"). –

+2

@leaf: существует действительный синтаксис для выражения * намерения *. –

ответ

17

Вы хотите slice() object:

index = slice(0, 2) 
print(somelist[index]) 

slice() модель старт, стоп и значение большого шага вы можете указать в синтаксисе [start:stop:stride] подписки, как объект.

Из документации:

Возвращает slice объект, представляющий набор индексов, указанный range(start, stop, step). По умолчанию начальный и конечный аргументы равны None. Объекты среза имеют атрибуты данных только для чтения start, stop и step, которые просто возвращают значения аргументов (или их значения по умолчанию).

Под обложках, Python фактически переводит подписку на slice() объекта при вызове пользовательских __getitem__ методы:

>>> class Foo(object): 
...  def __getitem__(self, item): 
...   return item 
... 
>>> Foo()[42:81:7] 
slice(42, 81, 7) 
>>> Foo()[:42] 
slice(None, 42, None) 

жизнеспособной альтернативой было бы хранить запуска и остановки, как отдельные значения:

startindex = 0 
stopindex = 2 
print(somelist[start:stop]) 
+0

спасибо, но как насчет «index = -2:» –

+0

@giorgishengelaia. Делайте это неправильно. Просто сохраните переменную 'index' со значением' -2'. Затем скажите 'print (somelist [index:])'. –

+1

@giorgishengelaia: это будет 'slice (-2, None)'.Попробуйте пример 'Foo()'; 'Foo() [- 2:]' возвращает 'срез (-2, None, None)'. –

11

Вы можете создать объект slice:

index = slice(0,2) 
print(lst[index]) 

Будьте осторожны, чтобы не использовать list как имя, чтобы избежать затенения встроенной функции list.

Из документов:

slice(start, stop[, step])

возвращает объект, представляющий срез множество индексов, определенных range(start, stop, step)

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