Я все еще пытаюсь понять, как манипулировать строками в Python. В настоящее время мне нужно использовать 4 строки, чтобы перейти от
('Al Jahar',)
к
'Al Jahar'
Это код, который я использую. Прекрасно работает, но хотелось бы сделать его более элегантным и питоническим.
selected_monster = f"{selected_monster}"
selected_monster = selected_monster[:-2] + selected_monster[-1]
selected_monster = selected_monster[:-1]
selected_monster = selected_monster[1:]
print(selected_monster)
Я не могу просто удалить/заменить символы «()» на «», потому что в названиях некоторых монстров эти символы есть, например: «Смотрящий (бла-бла)» или «Дракон, Зеленый». ВСЕ имена взяты из базы данных и имеют эту разметку вокруг тега имени «Имя монстра». Поэтому, если я попробую метод замены, заголовки испортятся, и я не смогу использовать их в качестве строковых переменных в своем коде.
🤔 А знаете ли вы, что...
Python поддерживает параллельное и асинхронное программирование с помощью модулей asyncio и multiprocessing.
('Al Jahar',)
— это кортеж. Вы можете определить это, выполнив
>>> selected_monster = ('Al Jahar',)
>>> type(selected_monster)
Чтобы получить доступ к элементу кортежа, вы можете просто проиндексировать его:
>>> selected_monster[0]
ИЛИ
>>> ('Al Jahar',)[0]
Вы также можете использовать распаковку кортежей. Версия ниже — если вы уверены, что она содержит только один элемент:
>>> selected_monster, = selected_monster
Если вы не уверены, спрячьте остаток в другом месте:
>>> selected_monster, *_ = selected_monster
Возможно, вы также захотите пересмотреть способ генерации selected_monster
, если вам нужно, чтобы это была строка.
Как насчет использования re
?
import re
text = "('Al Jahar',)"
match = re.match(r"\('(.+?)',\)", text)
if match:
name = match.group(1)
print(name) # Output: 'Al Jahar'
После отзывов пользователей кажется, что я действительно могу делать то, что хочу, с нулевым количеством строк дополнительного кода.
Вместо того, чтобы возиться с кортежем, как если бы это была строка, я могу обойти это и просто вызвать элемент кортежа, который вернул мой предыдущий SQL-запрос.
Мое использование становится (в паре):
sql = f"SELECT Frequency FROM Monsters WHERE Name = '{selected_monster[0]}'"