Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 7, 2014 20:58:32

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

Логика slice

py.user.next
То есть индексы его элементов не нужно знать, потому что в результате получается новый набор индексов.
А что делать с Tkinter, который как раз работает в соответствии с логикой slice? Мне *нужно* знать индексы как входных данных для Tkinter, так и выходных данных из него, потому что я анализирую текст. Причем, насколько я понял из своего опыта с Tkinter, положение ‘1.40’ может означать как строку 0, столбец 39, так и строку 0, столбец 40, в зависимости от того, начало это или конец выделения. Запоминать каждый раз, какой это элемент - начальный или конечный? Это тупо и нерационально. Вычислять по длине? Опять лишние телодвижения и лишние такты процессора, да и длину элемента я могу не знать.
Если же ты будешь по-своему вычислять, то это будет 158 - 150 = 8, а потом 8 + 1 = 9.
А я не могу понять, как можно вычислять по-другому. 3 яблока не превращаются в 2 только потому, что в срезе
[1:3]
якобы 2 элемента.
2000 лет со дня рождения Христа праздновали в 2001. Слава богу, хоть здесь здравый смысл восторжествовал.

Отредактировано vanvanov (Ноя. 7, 2014 21:36:39)

Офлайн

#2 Ноя. 7, 2014 23:30:11

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

Логика slice

vanvanov
А что делать с Tkinter, который как раз работает в соответствии с логикой slice?
А что там в Tkinter? Там вообще, по-моему, вся логика другая.

vanvanov
А я не могу понять, как можно вычислять по-другому.
Если паскаль возьмёшь, как раз так и будешь вычислять. Сначала вычислять разность между индексами, а потом добавлять к разности единицу.

vanvanov
3 яблока не превращаются в 2 только потому, что в срезе
[1:3]
якобы 2 элемента.

Как не превращаются? Превращаются:
>>> lst = ['apple' + str(i + 1) for i in range(5)]
>>> lst
['apple1', 'apple2', 'apple3', 'apple4', 'apple5']
>>> lst[1:3]
['apple2', 'apple3']
>>> 
>>> lst[-3:-1]
['apple3', 'apple4']
>>>



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

Офлайн

#3 Ноя. 8, 2014 11:54:55

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

Логика slice

py.user.next
А что там в Tkinter? Там вообще, по-моему, вся логика другая.
Там конец выделения вычисляется, судя по всему, прибавлением len(). Ввиду этого, для того, чтобы выделить, например, 5-й символ в тексте, надо назначить тэг выделения для позиций ‘1.5’,'1.6'. Вообще, это все реализовано крайне неудобно. Вместо ‘1.5’,'1.6' можно было бы указывать
[0,5]
(строка, столбец) или, лучше всего, просто
[5,5]
(номера начального и конечного символов начиная с 0 без учета строк).

А при такой логике, для того, чтобы задать выделение чего-нибудь, мне надо сначала определить, на какой строке находится исходное слово, затем, вычислить, сколько символов надо пропустить от начала строки, вместо того, чтобы указать, например, просто
[75,100]
для первого и последнего символа слова.

Как не превращаются? Превращаются
Я имел в виду, в реальной жизни

Отредактировано vanvanov (Ноя. 8, 2014 11:59:14)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version