#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))
но первая форма будет полезна, если вы хотите иметь возможность что-то делать с этой строкой, кроме ее печати. 🙂