2011-02-02 4 views
0

У меня есть список кортежей, как:Объединение элементов списка

data = [('a1', 'a2'), ('b1', 'b2')] 

И я хочу, чтобы создать строку, как это: "('a1', 'a2'), ('b1'. 'b2')"

Если я сделать что-то вроде: ','.join(data), я получаю сообщение об ошибке :

TypeError: sequence item 0: expected string, tuple found 

Если я хочу сделать что-то в одной строке, не делая что-то вроде:

for elem in data: 
    str += ',%s' % str(elem) 

то есть способ?

+1

и почему вы хотите получить такой выход? – SilentGhost

ответ

14

Используйте генератор для перевода кортежей в строки, а затем используйте join().

>>> ', '.join(str(d) for d in data) 
"('a1', 'a2'), ('b1', 'b2')" 
1

Отклон открытия и закрытия скобки из str() выхода:

>>> data = [('a1', 'a2'), ('b1', 'b2')] 
>>> str(data) 
"[('a1', 'a2'), ('b1', 'b2')]" 
>>> str(data)[1:-1] 
"('a1', 'a2'), ('b1', 'b2')" 
>>> 
0

Ответы по Payne и marcog являются правильными, поскольку они непосредственно преобразовать кортеж в строку.

Если вам нужно больше гибкости с форматом вывода, вы можете распаковать кортеж внутри выражения генератора и использовать его значения в качестве параметров в строку формата таким образом:

", ".join("first element: %s, second element: %s" % (str(x), str(y)) for x, y in data) 

Таким образом, вы можете преодолеть по умолчанию str представление кортежа.

+0

вам не нужно явно преобразовывать в str элементы кортежа: 1. они уже строки, 2. они будут неявно преобразованы при форматировании строки. – SilentGhost

Смежные вопросы