Объединение элементов списка - PullRequest
0 голосов
/ 02 февраля 2011

У меня есть список кортежей, таких как:

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)

, тогда есть ли способ?

Ответы [ 4 ]

14 голосов
/ 02 февраля 2011

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

>>> ', '.join(str(d) for d in data)
"('a1', 'a2'), ('b1', 'b2')"
1 голос
/ 02 февраля 2011

Отменить открывающие и закрывающие скобки из str() вывода:

>>> data = [('a1', 'a2'), ('b1', 'b2')]
>>> str(data)
"[('a1', 'a2'), ('b1', 'b2')]"
>>> str(data)[1:-1]
"('a1', 'a2'), ('b1', 'b2')"
>>> 
0 голосов
/ 02 февраля 2011

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

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

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

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

0 голосов
/ 02 февраля 2011
','.join(str(i) for i in data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...