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

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

Я не могу просто удалить/заменить символы «()» на «», потому что в названиях некоторых монстров эти символы есть, например: «Смотрящий (бла-бла)» или «Дракон, Зеленый». ВСЕ имена взяты из базы данных и имеют эту разметку вокруг тега имени «Имя монстра». Поэтому, если я попробую метод замены, заголовки испортятся, и я не смогу использовать их в качестве строковых переменных в своем коде.

Вполне возможно, что вы можете сделать это с нулевыми строками, если вообще избегаете этого. Не могу сказать, не видя вашего кода, который его создал.

no comment 02.09.2024 02:20

Результаты, поступающие из базы данных, не являются строками. Вы получаете список строк, и каждая строка представляет собой кортеж значений, даже если он только один. for row in cursor.fetch_all():/print(row[0]) напечатает первый (или единственный) столбец в каждой строке.

Tim Roberts 02.09.2024 02:56

Спасибо, что нашли время, Тим Робертс, я не знал, что каждая строка представляет собой кортеж, когда делал курсор.fetch_all :) Это было очень полезно.

Nickodimus 02.09.2024 21:59

Собираетесь ли вы показать нам код, присваивающий переменную, чтобы мы могли показать вам лучший способ сделать это (без дополнительных строк)?

no comment 02.09.2024 22:02

@nocomment Я пытаюсь правильно отформатировать свой код, написанный здесь, и у меня возникли проблемы с выяснением этого в этой области комментариев. Это был базовый вызов sql, который возвращал все имена монстров и помещал их в CTkListbox с функцией обратного вызова по щелчку мыши (который я написал в качестве ответа, который все здесь помогли мне понять.

Nickodimus 04.09.2024 00:41

Вы можете использовать одинарные обратные кавычки для форматирования, как в комментарии Тима, но я бы все равно поставил это в вопрос.

no comment 04.09.2024 00:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
6
107
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, если вам нужно, чтобы это была строка.

Большое спасибо за совет! Я все еще изучаю все тонкости Python и не знаком с кратким использованием типа (selected_monster) таким образом. Это чрезвычайно полезные знания.

Nickodimus 02.09.2024 21:56

Рад, что это было полезно для вас. Вы можете проголосовать за и выбрать ответ, нажав на стрелку и галочку слева от него.

Mad Physicist 02.09.2024 22:03

Как насчет использования 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]}'"

Хм, да, это еще один способ использовать ноль дополнительных строк. Не тот, который я имел в виду, где в переменной будет строка, поэтому вам не понадобится [0] (и, вероятно, потребуется только один дополнительный символ вместо трех:-)

no comment 02.09.2024 22:10

Другие вопросы по теме