Строки и функции для работы с ними (faq)

Разбиение строки

Для анализа текста требуются различные метрики, такие как количество слов, количество символов, средняя длина предложения. Чтобы вычислить эти значения, нам нужно подготовить текст — очистить и разделить. К счастью для нас, в Python есть несколько встроенных функций для разделения текста:


Разбиение по пробелу (по умолчанию):

test_string.split()
Out: 

Разбиение на определенное количество токенов:

test_string.split(' ', 2)
Out: 

Разбиение на определенное количество токенов в обратном направлении:

test_string.rsplit(' ', 2)
Out: 

Разбиение по произвольному символу:

test_string.split('e')
Out: 

Разбиение строки по нужному токену с токенами до и после него:

test_string.partition('fox')
Out: ('The quick brown ', 'fox', ' jumps over the lazy dog')

Произвольные выражения

Так как f-строки оцениваются по мере выражения, вы можете внести любую или все доступные выражения Python в них. Это позволит вам делать интересные вещи, например следующее:

Python

print(f»{2 * 37}») # Вывод: ’74’

1 2

print(f»{2 * 37}»)

# Вывод: ’74’


Также вы можете вызывать функции. Пример:

Python

def to_lowercase(input): return input.lower()

name = «Eric Idle»

print(f»{to_lowercase(name)} is funny.») # Вывод: ‘eric idle is funny.’

1 2 3 4 5 6 7

defto_lowercase(input)

returninput.lower()

name=»Eric Idle»

print(f»{to_lowercase(name)} is funny.»)

# Вывод: ‘eric idle is funny.’

Также вы можете вызывать метод напрямую:

Python

print(f»{name.lower()} is funny.») # Вывод: ‘eric idle is funny.’

1 2

print(f»{name.lower()} is funny.»)

# Вывод: ‘eric idle is funny.’


Вы даже можете использовать объекты, созданные из классов при помощи f-строки. Представим, что у вас есть следующий класс:

Python

class Comedian: def __init__(self, first_name, last_name, age): self.first_name = first_name self.last_name = last_name self.age = age

def __str__(self): return f»{self.first_name} {self.last_name} is {self.age}.»

def __repr__(self): return f»{self.first_name} {self.last_name} is {self.age}. Surprise!»

1 2 3 4 5 6 7 8 9 10 11

classComedian

def__init__(self,first_name,last_name,age)

self.first_name=first_name

self.last_name=last_name

self.age=age

def__str__(self)

returnf»{self.first_name} {self.last_name} is {self.age}.»

def__repr__(self)

returnf»{self.first_name} {self.last_name} is {self.age}. Surprise!»

Вы могли бы сделать следующее:

Python

new_comedian = Comedian(«Eric», «Idle», «74»)

print(f»{new_comedian}») # Вывод: ‘Eric Idle is 74.’

1 2 3 4

new_comedian=Comedian(«Eric»,»Idle»,»74″)

print(f»{new_comedian}»)

# Вывод: ‘Eric Idle is 74.’


Методы __str__() и __repr__() работают с тем, как объекты отображаются в качестве строк, так что вам нужно убедиться в том, что вы используете один из этих методов в вашем определении класса. Если вы хотите выбрать один, попробуйте __repr__(), так как его можно использовать вместо __str__().

Строка, которая возвращается __str__() является неформальным строковым представлением объекта и должна быть читаемой. Строка, которую вернул __str__() — это официальное выражение и должно быть однозначным. При вызове str() и repr(), предпочтительнее использовать __str__() и __repr__() напрямую.

По умолчанию, f-строки будут использовать __str__(), но вы должны убедиться в том, что они используют __repr__(), если вы включаете флаг преобразования !r:

Python

print(f»{new_comedian}») # Вывод: ‘Eric Idle is 74.’

print(f»{new_comedian!r}») # Вывод: ‘Eric Idle is 74. Surprise!’

1 2 3 4 5

print(f»{new_comedian}»)

# Вывод: ‘Eric Idle is 74.’  

print(f»{new_comedian!r}»)

# Вывод: ‘Eric Idle is 74. Surprise!’

Если вы хотите прочитать часть обсуждения, в результате которого f-strings поддерживают полные выражения Python, вы можете сделать это здесь.

Соединение строк в Python

Рассматривая простейшие операции со строками, мы увидели, как объединяются строки через операцию сложения. Однако есть и другая возможность для соединения строк — метод join():, объединяющий списки строк. В качестве разделителя используется текущая строка, у которой вызывается этот метод:

words = "Let", "me", "speak", "from", "my", "heart", "in", "English"

# символ разделителя - пробел
sentence = " ".join(words)
print(sentence)  # Let me speak from my heart in English

# символ разделителя - вертикальная черта
sentence = " | ".join(words)
print(sentence)  # Let | me | speak | from | my | heart | in | English

А если вместо списка в метод join передать простую строку, разделитель будет вставляться уже между символами:

word = "hello"
joined_word = "|".join(word)
print(joined_word)      # h|e|l|l|o

С этим читают