Python 将不同的列表数据类型联接到字符串中

Python 将不同的列表数据类型联接到字符串中,python,string,list,join,Python,String,List,Join,我需要将列表中的元素连接成一个字符串(到目前为止看起来很简单) 但是,此列表中有些元素是字符串,有些元素是数字 我想要实现的是一个字符串,其中原始字符串仍被引用,但数字不是: 例如: mystring = ['text field', 24, 'text2', 55.45] 预期输出(这实际上是一个字符串,为了清晰起见,我删除了开头和结尾的引号,简单的引号必须是字符串的一部分!): 到目前为止,我尝试的是: >>> ', '.join(mystring) 然后,口译员抱怨i

我需要将列表中的元素连接成一个字符串(到目前为止看起来很简单)

但是,此列表中有些元素是字符串,有些元素是数字

我想要实现的是一个字符串,其中原始字符串仍被引用,但数字不是:

例如:

mystring = ['text field', 24, 'text2', 55.45]
预期输出(这实际上是一个字符串,为了清晰起见,我删除了开头和结尾的引号,简单的引号必须是字符串的一部分!):

到目前为止,我尝试的是:

>>> ', '.join(mystring)
然后,口译员抱怨int:

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]
然后它工作了,但我真的想保留我原来的列表,并达到预期的结果


有什么建议吗?

只需将
中的元素转换为字符串。使用内置的:

但是,如果要在字符串周围添加引号,则应使用:

交互式shell中的示例:

$ 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"
请注意,双引号(
)不是实际字符串的一部分,它们用于表示我们在谈论字符串。

使用
repr

>>> mystring = ['text field', 24, 'text2', 55.45]
>>> ', '.join(map(repr, mystring))
"'text field', 24, 'text2', 55.45"
一种办法是:

', '.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"

你就不能把列表的字符串表示法去掉括号吗?听起来这就是你实际上想要实现的

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

第二个选项(使用repr)有效!谢谢。是的,双引号不是字符串的一部分(这就是为什么在问题中我删除了它们,只是为了避免混淆)。我喜欢使用
map
,但是我想知道使用
map
和使用列表理解(@Willem solution)之间是否有什么区别?我将发布另一个问题,询问是否存在差异或只是语义偏好。@SembeiNorimaki不要发布另一个问题,请参阅
', '.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"
>>> str(mystring)[1:-1]
"'text field', 24, 'text2', 55.45"