Есть ли способ сократить этот код до двух строк, а может и до трех?

Я все еще пытаюсь понять, как манипулировать строками в 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.


107
3

Ответы:

Решено

('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]}'"

Интересные вопросы для изучения