Удаление скобок из списка Python

#python

#python

Вопрос:

Я запускаю SQL-запрос, который возвращает результирующий набор, хранящийся в списке x

 ('439FBFA0-B905-4C73-ABD4-3B1870AF1409', )
('425F9948-E1F3-45D3-9AC2-6A7DCA6F607E', )
  

вот мой код на Python

 x = []

cursor = conn.cursor()
label1 = cursor.execute("SELECT....")
for row in cursor:
    x.append(row)

for i in x:
    print(i)


s = x.replace(",","")

for i in s:
    print(i)
  

каков наилучший способ форматирования списка? Я хочу удалить () и , и ‘
Я думал, что замена будет работать в этом случае, но я получаю сообщение об ошибке «объект ‘list’ не имеет атрибута ‘replace'»

Результат, который я ищу, это

 439FBFA0-B905-4C73-ABD4-3B1870AF1409
425F9948-E1F3-45D3-9AC2-6A7DCA6F607E
  

Комментарии:

1. Как насчет индексации в списке (или кортеже, как показано в примере)? Т.е.: i[0]

2. Вот наивное решение: f = operator.itemgetter(0); [f(i) for i in x]

Ответ №1:

 for x in cursor:
  

курсоры возвращают кортеж для каждой строки — вот почему вы видите круглые скобки и запятую. Самый простой способ распаковать это

 for (x,) in cursor:
  

Ответ №2:

('439FBFA0-B905-4C73-ABD4-3B1870AF1409', ) это одна строка. Чтобы получить из него первый столбец, вы должны просто проиндексировать его:

 x = []

cursor = conn.cursor()
label1 = cursor.execute("SELECT....")
for row in cursor:
    x.append(row[0])
  

Или немного чище:

 cursor = conn.cursor()
label1 = cursor.execute("SELECT....")
x = [row[0] for row in cursor.fetchall()]
  

Обратите внимание, что вы также можете получить доступ к столбцам по имени, например row.column_name .

Ответ №3:

Использовать join :

 print('n'.join(' '.join(row) for row in x))
  

' '.join(row) работает с одним из ваших кортежей и создает строку, которая просто соединяет элементы кортежа с ' ' (вместо (element, ) форматирования по умолчанию). Выполнение этого в генераторе ( for row in x ) дает вам последовательность строк, которые затем вы можете объединить 'n' , чтобы получить желаемый результат.

По сути, это то же самое, что делать:

 for row in x:
    print(' '.join(row))
  

но первая форма будет полезна, если вы хотите иметь возможность что-то делать с этой строкой, кроме ее печати. 🙂