Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 31, 2014 11:37:26

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Логика slice

Объясните, пожалуйста, эту логику.

>>> line='поляна'
>>> line[1:4]
'оля'
Если мы берем левую границу, то для “о” получаем 1, что и логично, потому что отсчет ведется с 0. Однако, чтобы правая граница захватила “я”, нужно писать 4, а не 3. Это нелогично, и вызывает излишние трудности, когда в правой границе у меня переменная, обозначающая номер символа, с которым надо работать.

Офлайн

#2 Окт. 31, 2014 13:02:18

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Логика slice

эт из-за len
если бы было “логично”, то нужно былобы писать не

>>> line = "qwerty"
>>> len(line)
6
>>> line[0:len(line)]
'qwerty'
>>> 
а
>>> line[0:len(line)-1]
'qwerty'
>>> 
вы привыкните



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Окт. 31, 2014 23:22:56

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Логика slice

terabayt
эт из-за len
Бред пишешь.
>>> line[0:len(line)-1]
'qwert'

[b]vanvanov[/b]

vanvanov
Прочитай хотя бы один раз tutorial, там про slice написано.



Отредактировано Budulianin (Окт. 31, 2014 23:23:44)

Офлайн

#4 Окт. 31, 2014 23:39:02

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Логика slice

Budulianin
После того как обинил кого-то в неправоте, нужно высказать свой вариант.
Я точно помню что где-то об этом читал.



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Окт. 31, 2014 23:42:03

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Логика slice

terabayt
Я точно помню что где-то об этом читал.
>>> line[0:len(line)-1]
'qwerty'
Это ты тоже вычитал?



Офлайн

#6 Окт. 31, 2014 23:44:02

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Логика slice

ахаха, я понял! а может ты прочитаешь то что написано перед кодом?!



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Окт. 31, 2014 23:55:23

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Логика slice

terabayt
ахаха, я понял! а может ты прочитаешь то что написано перед кодом?!
Подлец, приглашение ввода в оболочке путает.



Офлайн

#8 Ноя. 1, 2014 00:04:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Логика slice

vanvanov
Это нелогично, и вызывает излишние трудности
vanvanov
line[1:4]
4 - 1 = 3
Фактически, так и думаешь, когд делаешь их. Если нужно три символа взять, то ищёшь только первый индекс, а второй индекс просто вычисляешь.



Офлайн

#9 Ноя. 3, 2014 19:53:19

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Логика slice

py.user.next
4 - 1 = 3
Фактически, так и думаешь, когд делаешь их.
Ну не знаю, лично я так не думаю. Если числа указываются включительно, то
line[1:4]
должно быть эквивалентно
line[1]+line[2]+line[3]+line[4]
. Если не включительно, то
line[2]+line[3]
. А когда 1-я скобка - включительно, 2-я - нет, это ерунда какая-то.

Отредактировано vanvanov (Ноя. 3, 2014 19:54:12)

Офлайн

#10 Ноя. 3, 2014 20:23:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Логика slice

Ну, к примеру, сколько элементов в срезе

s[150:158]
?
Ответ - 8, почему? Потому что 158 - 150 = 8. Если же ты будешь по-своему вычислять, то это будет 158 - 150 = 8, а потом 8 + 1 = 9.

vanvanov
А когда 1-я скобка - включительно, 2-я - нет, это ерунда какая-то.
Когда имеешь дело со срезом, то надо знать, где он начинается и сколько в нём элементов. То есть индексы его элементов не нужно знать, потому что в результате получается новый набор индексов.



Отредактировано py.user.next (Ноя. 3, 2014 20:23:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version