Преобразование списков кортежей в строки 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)]])
Ответ 4
In [1]: ' '.join('%[email protected]%d' % (el[0], el[1]) for el in [(1,1),(2,2),(3,3)])
Out[1]: '[email protected] [email protected] [email protected]'
Ответ 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)]))
Ответ 8
Вам нужно только join
и str
в понимании генератора.
>>> ['@'.join(str(i) for i in t) for t in l]
['[email protected]', '[email protected]', '[email protected]']
>>> ' '.join('@'.join(str(i) for i in t) for t in l)
'[email protected] [email protected] [email protected]'
Ответ 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]
но это будет работать, только если вы точно знаете, что ни один из кортежей не имеет следующих последовательностей символов, которые необходимо сохранить в конечном результате: ), (
, [(
, )]
, ,