LINUX.ORG.RU

[python] find и rfind. Что-то странное

 


0

1

Захожу в python3, выполняю

«Чтобы настроить консоль».find(«наст»)

6

«Чтобы настроить консоль».rfind(«наст»)

6

str.find('Чтобы настроить консоль','наст')

6

str.rfind('Чтобы настроить консоль','наст')

6

Захожу в python (версия 2.6.5)

«Чтобы настроить консоль».find(«наст»)

11

«Чтобы настроить консоль».rfind(«наст»)

11

str.find('Чтобы настроить консоль','наст')

11

str.rfind('Чтобы настроить консоль','наст')

11

Это как так получатся?



Последнее исправление: alexkarta (всего исправлений: 1)

В Python 3 UTF-8 теперь по умолчанию (в Python 2 по умолчанию была кодировка ASCII).

Чтобы получить такой же результат в Python 2.X:

u"Чтобы настроить консоль".find(u"наст")

edigaryev ★★★★★
()
Ответ на: комментарий от edigaryev

там далеко не utf8, а одна из вариаций юникода

mikki
()

Для python 2.6 нужно использовать такое:

'Чтобы настроить консоль'.decode('utf-8').find('наст'.decode('utf-8'))

(правда если кодировка utf-8)

AlexKiriukha ★★★★
()
Ответ на: комментарий от alexkarta

попробуй такой код

u"Чтобы настроить консоль наст".find(u"наст")
u"Чтобы настроить консоль наст".rfind(u"наст")
dimon555 ★★★★★
()
Ответ на: комментарий от alexkarta

А почему она должна быть?

str.rfind(sub[, start[, end]])¶
    Return the highest index in the string where substring sub is found, such that sub is contained within s[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.
Если начинать поиск с конца строки, то самое первое совпадение в вашем случае будет находится через 6 символов от начала строки.
>>> "разраз".rfind("раз")
3
>>> "раздва".rfind("раз")
0
>>> 

edigaryev ★★★★★
()
Ответ на: комментарий от alexkarta

Перечитал еще раз внимательно параграф в книжке, просто неверно понял смысл, сейчас все прояснилось. надо быть внимательнее

alexkarta
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.