Преобразование списков кортежей в строки Python

Я написал функцию в python, которая возвращает список, например

[(1,1),(2,2),(3,3)] 

Но я хочу, чтобы результат был как строка, поэтому я могу заменить запятую на другой char, поэтому выход будет

'[email protected]' '[email protected]' '[email protected]' 

Какой-нибудь простой способ обойти это?:) Спасибо за любые советы заранее

Ответы

Ответ 1

Это выглядит как list of tuple s, где каждый tuple имеет два элемента.

' '.join(['%[email protected]%d' % (t[0],t[1]) for t in l])

Конечно, можно упростить:

' '.join(['%[email protected]%d' % t for t in l])

Или даже:

' '.join(map(lambda t: '%[email protected]%d' % t, l))

Где l - ваш оригинальный list. Это генерирует пары "число @число" для каждого кортежа в списке. Затем эти пары соединяются с пробелами (' ').

Синтаксис join выглядел немного странным для меня, когда я впервые начал укорачиваться с Python, но документация была огромной помощью.

Ответ 2

Вы можете преобразовать кортежи в строки с помощью оператора% со списком или выражением генератора, например.

ll = [(1,1), (2,2), (3,3)]
['%[email protected]%d' % aa for aa in ll]

Это вернет список строк, таких как:

['[email protected]', '[email protected]', '[email protected]']

Вы можете объединить полученный список строк вместе для вывода. В этой статье описывается полдюжины различных подходов с эталонами и анализом их относительных достоинств.

Ответ 3

' '.join([str(a)+"@"+str(b) for (a,b) in [(1,1),(2,2),(3,3)]])

или для произвольных наборов в списке,

' '.join(['@'.join([str(v) for v in k]) for k in [(1,1),(2,2),(3,3)]])

Ответ 5

[ str(e[0]) + ',' + str(e[1]) for e in [(1,1), (2,2), (3,3)] ]

Это, если вы хотите, чтобы они были в наборе строк, я не понял его, если вы хотите получить одну выходную строку или коллекцию.

Ответ 6

[str(item).replace(',','@') for item in [(1,1),(2,2),(3,3)]]

Ответ 7

" ".join(map(lambda el:"%[email protected]%d" % el, [(1,1), (2,2), (3,3)]))

Ответ 9

вы можете использовать функцию repr, а затем просто заменить биты строки:

>>> original = [(1,1),(2,2),(3,3)]
>>> intermediate = repr(original)
>>> print intermediate
[(1, 1), (2, 2), (3, 3)]
>>> final = intermediate.replace('), (', ' ').replace('[(','').replace(')]','').replace(', ','@')
>>> print final
[email protected] [email protected] [email protected]

но это будет работать, только если вы точно знаете, что ни один из кортежей не имеет следующих последовательностей символов, которые необходимо сохранить в конечном результате: ), (, [(, )], ,