Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2013 23:29:42

Арртем
От:
Зарегистрирован: 2011-02-08
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Доброго времени суток. Не совсем понятно для каких элементов последовательности этот срез?

>>> s=("spam")
>>> s[:0]
''
1.Почему результат среза s это (пустая строка)
2.Что означает этот результат?

>>> s[0:0]==s[:0]
True
>>> (s[0:0]==s[:0])!=s[0]
True



Отредактировано Арртем (Авг. 6, 2013 23:44:38)

Офлайн

#2 Авг. 6, 2013 23:47:32

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

>>> s='qwerty'
>>>
>>> s[:0]
''
>>> s[0:0]
''
>>> s[0:1]
'q'
>>> s[0]
'q'
что именно вам не понятно? почему пустой срез в диапазоне элементов “все до нулевого” ? Потому что перед нулевым элементом ничего нет



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Авг. 7, 2013 00:00:48

Арртем
От:
Зарегистрирован: 2011-02-08
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Просто если значение выходит за пределы строки обычно выдается ошибка, например

 s[10]
(в моем примере), но я думал что значение
 s[:0]
то же не входит в предел вышеописанной строки (длинной от 0 до 3) ведь формально это значение -0, а ошибки не было. Поправьте меня пожалуйста.



Отредактировано Арртем (Авг. 7, 2013 00:02:58)

Офлайн

#4 Авг. 7, 2013 01:43:37

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

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Арртем
s=("spam")
а что там за скобки ?

Арртем
ведь формально это значение -0
это не -0, а срез с нулевого по нулевой, не включая нулевой
берётся пустая строка, которая есть перед первым символом, между первым и вторым, между вторым и третьим и так далее

>>> s = 'abc'
>>> s[0:0]
''
>>> s[1:1]
''
>>> s[2:2]
''
>>> s[3:len(s)]
''
>>> s[10:len(s)]
''
>>>

исключения нет, потому что это не обращение по целочисленному индексу
>>> s[slice(0, 0)]
''
>>> s[slice(10, 15)]
''
>>> s[slice(0, 3)]
'abc'
>>>



Отредактировано py.user.next (Авг. 7, 2013 01:45:44)

Офлайн

#5 Авг. 7, 2013 09:47:10

Арртем
От:
Зарегистрирован: 2011-02-08
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Поправьте меня пожалуйста.
Т.е объект

"spam"
состоит из односимвольных строк чередующихся с пустыми строками?
Пользуюсь Марк Лутц 4-е изд. “Изучаем питон”. Если можно укажите ссылку на страницу в книге по данному вопросу что строка состоит из односимвольных строк чередующихся с пустыми строками.
Индексу первой строки (0)в моем примере соответствует “s”.
В срезе
 s[0:0]
второй индекс 0 после двоеточия имеет больший приоритет чем первый индекс 0 до двоеточия, т.к именно он заставляет интерпретатор выводить пустую строку, а не ошибку или другое значение.



Отредактировано Арртем (Авг. 7, 2013 09:56:00)

Офлайн

#6 Авг. 7, 2013 10:32:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Арртем
состоит из односимвольных строк чередующихся с пустыми строками
откуда Вы пустые строки выдумали?



Офлайн

#7 Авг. 7, 2013 10:33:33

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

FishHook

FishHook
откуда Вы пустые строки выдумали?
Мне самому интересно. Только что прочитал.



Отредактировано 4kpt (Авг. 7, 2013 10:34:20)

Офлайн

#8 Авг. 7, 2013 10:37:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Арртем, тебе же уже сказали, что

s[0:0]
для ЛЮБОГО списка вернет пустой список, а для строки пустую строку, просто потому что это срез от нуля, до нуля, не включая нуля. С тем же успехом можно написать
s[2:1]
, в этот срез не попадет ни один элемент.



Офлайн

#9 Авг. 7, 2013 10:38:10

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Арртем
А как Вы тогда поясните это:

>>> str_ = "123"
>>> str_[100:200]
>>> ''

FishHook
Извините, не видел Ваш пост…



Отредактировано 4kpt (Авг. 7, 2013 10:39:10)

Офлайн

#10 Авг. 7, 2013 10:52:02

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Срез каких элементов последовательности отображает запись >>> s=("spam") >>> s[:0] ''

Арртем
Пользуюсь Марк Лутц 4-е изд. “Изучаем питон”. Если можно укажите ссылку на страницу в книге
Арртем
В срезе
 s[0:0]
второй индекс 0 после двоеточия имеет больший приоритет чем первый индекс 0 до двоеточия, т.к именно он заставляет интерпретатор выводить пустую строку, а не ошибку или другое значение.


Арртем
состоит из односимвольных строк чередующихся с пустыми строками?
И данное утверждение вполне себе истинно, что естественно. Любая величина + пустота = любая величина. Можно проверить:
>>> s = 's'+''+'p'+''+'a'+''+'m'
>>> s
'spam'
Обратное неверно:
>>> list(s)
['s', 'p', 'a', 'm']
Но тут это излишние замуты. Вы своим срезом просто берёте строку длины 0.



————————–
Истина где-то рядом

Отредактировано alexbadaloff (Авг. 7, 2013 12:00:42)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version