删除列表中的单引号,拆分字符串避免引号
remove single quotes in list, split string avoiding the quotes
是否可以拆分字符串并避免引号(单引号)?
我想从列表中删除单引号(保留列表、字符串和浮点数:
l=['1','2','3','4.5']
期望的输出:
l=[1, 2, 3, 4.5]
下一行既不适用于 int 也不适用于 float
l=[float(value) for value in ll]
引号不是列表中字符串的一部分,因此无法删除它们。输出显示列表元素周围的引号,表明您正在处理字符串。
您可以使用
将列表 ['1','2','3','4.5']
中的所有项目转换为浮点数
>>> l = ['1','2','3','4.5']
>>> [float(x) for x in l]
[1.0, 2.0, 3.0, 4.5]
或
>>> map(float, l)
[1.0, 2.0, 3.0, 4.5]
但是,这不是 "removing the quotes" 来自您的列表项,而是将您的字符串列表转换为浮点数列表。打印时,浮点数不会显示在它们周围的引号中,因为它们不是字符串。
根据每个值的样子得到int
或float
,所以'1'
变成1
,"1.2"
变成1.2
,您可以 use ast.literal_eval
以与 Python 的文字解析器相同的方式进行转换,因此您拥有 int
和 float
的实际 list
,而不是比 str
的 list
(回显时会包括引号):
>>> import ast
>>> [ast.literal_eval(x) for x in l]
[1, 2, 3, 4.5]
与普通 eval
不同,这不会打开安全漏洞,因为它无法执行任意代码。
你可以在这里使用 map
来获得温和的性能提升(因为 ast.literal_eval
是用 C 语言实现的内置函数;通常,map
对列表推导式的增益很小或丢失),在 Py 2 中,map(ast.literal_eval, l)
或 Py3(其中 map
returns 生成器,而不是 list
),list(map(ast.literal_eval, l))
如果目标纯粹是显示不带引号的字符串,您只需手动格式化并完全避免类型转换:
>>> print('[{}]'.format(', '.join(l)))
[1, 2, 3, 4.5]
你的下一行不起作用的原因是你有一个 ll
而不是 l
['1','2','3','4.5']
print([int(i) if float(i) % 1 == 0 else float(i) for i in l])
>>> [1, 2, 3, 4, 4.5]
是否可以拆分字符串并避免引号(单引号)?
我想从列表中删除单引号(保留列表、字符串和浮点数:
l=['1','2','3','4.5']
期望的输出:
l=[1, 2, 3, 4.5]
下一行既不适用于 int 也不适用于 float
l=[float(value) for value in ll]
引号不是列表中字符串的一部分,因此无法删除它们。输出显示列表元素周围的引号,表明您正在处理字符串。
您可以使用
将列表['1','2','3','4.5']
中的所有项目转换为浮点数
>>> l = ['1','2','3','4.5']
>>> [float(x) for x in l]
[1.0, 2.0, 3.0, 4.5]
或
>>> map(float, l)
[1.0, 2.0, 3.0, 4.5]
但是,这不是 "removing the quotes" 来自您的列表项,而是将您的字符串列表转换为浮点数列表。打印时,浮点数不会显示在它们周围的引号中,因为它们不是字符串。
根据每个值的样子得到int
或float
,所以'1'
变成1
,"1.2"
变成1.2
,您可以 use ast.literal_eval
以与 Python 的文字解析器相同的方式进行转换,因此您拥有 int
和 float
的实际 list
,而不是比 str
的 list
(回显时会包括引号):
>>> import ast
>>> [ast.literal_eval(x) for x in l]
[1, 2, 3, 4.5]
与普通 eval
不同,这不会打开安全漏洞,因为它无法执行任意代码。
你可以在这里使用 map
来获得温和的性能提升(因为 ast.literal_eval
是用 C 语言实现的内置函数;通常,map
对列表推导式的增益很小或丢失),在 Py 2 中,map(ast.literal_eval, l)
或 Py3(其中 map
returns 生成器,而不是 list
),list(map(ast.literal_eval, l))
如果目标纯粹是显示不带引号的字符串,您只需手动格式化并完全避免类型转换:
>>> print('[{}]'.format(', '.join(l)))
[1, 2, 3, 4.5]
你的下一行不起作用的原因是你有一个 ll
而不是 l
['1','2','3','4.5']
print([int(i) if float(i) % 1 == 0 else float(i) for i in l])
>>> [1, 2, 3, 4, 4.5]