2017-01-12 2 views
2

Мне нужно объединить элементы списка в строку (пока выглядит просто).Объединение различных типов данных списка в строку

Однако этот список содержит некоторые элементы, которые являются строками и другими, которые являются числами.

То, что я хочу достичь, это строка, где исходные строки еще цитируемый но цифры не являются:

Пример:

mystring = ['text field', 24, 'text2', 55.45] 

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

'text field', 24, 'text2', 55.45 

то, что я пытался до сих пор:

>>> ', '.join(mystring) 

интерпретатор жалуется на междунар:

TypeError: sequence item 1: expected string, int found 

Если я пытаюсь отобразить все в строку, то я скучаю кавычки строка.

>>> ', '.join(map(str,a)) 

'text field, 24, text2, 55.45' 

Конечно, я мог бы изменить свой первоначальный список, чтобы выглядеть следующим образом:

mylist2 = ["'text field'", 24, "'text2'", 55.45] 

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

Любые предложения?

ответ

5

Использование repr:

>>> mystring = ['text field', 24, 'text2', 55.45] 
>>> ', '.join(map(repr, mystring)) 
"'text field', 24, 'text2', 55.45" 
+0

Мне нравится использование 'map', однако мне интересно, есть ли разница между использованием 'map' или использование списка (решение @Willem)? Я отправлю еще один вопрос, чтобы спросить, есть ли на самом деле разница или это просто семантическое предпочтение. –

+0

@SembeiNorimaki Не задавайте другой вопрос, см. Http://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map –

4

Просто преобразовать элементы в .join в строку с помощью str(..) встроенной команды:

', '.join(str(x) for x in mystring) 

Если вы хотите, однако, чтобы добавить кавычки вокруг строк, вы должны использовать repr(..):

', '.join(repr(x) for x in mystring) 

Пример в интерактивной оболочке:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> str('aa') 
'aa' 
>>> mystring = ['text field', 24, 'text2', 55.45] 
>>> ', '.join(str(x) for x in mystring) 
'text field, 24, text2, 55.45' 
>>> ', '.join(repr(x) for x in mystring) 
"'text field', 24, 'text2', 55.45" 

Обратите внимание, что двойные кавычки (") не являются частью фактически строки, они там, чтобы показать, что мы говорим о строке.

+0

Второй вариант (с репрезентацией) работает! Благодарю. И да, двойные кавычки не являются частью строки (вот почему в вопросе я их удалил, чтобы избежать путаницы) –

0

подход будет:

', '.join("'{}'".format(s) if isinstance(s, str) else str(s) for s in mystring) 

Выход:

>>> mystring = ['text field', 24, 'text2', 55.45] 
>>> 
>>> ', '.join("'{}'".format(s) if isinstance(s, str) else str(s) for s in mystring) 
"'text field', 24, 'text2', 55.45" 
2

Не можете вы просто строковое представление списка и отрезать скобки? Похоже, это то, чего вы на самом деле пытаетесь достичь в любом случае.

>>> str(mystring)[1:-1] 
"'text field', 24, 'text2', 55.45" 
+0

Да, я тоже старался и работает. –

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