是否可以拆分字符串并避免引号(单个)?
我想从列表中删除单引号(保留列表,字符串和浮点数:
l=['1','2','3','4.5']
期望的输出:
l=[1, 2, 3, 4.5]
下一行既不适用于int也不适用于float
l=[float(value) for value in ll]
答案 0 :(得分:3)
要根据每个值的显示得到int
或float
,'1'
变为1
而"1.2"
变为1.2
,可以use ast.literal_eval
以与Python文字解析器相同的方式进行转换,因此您实际拥有list
个int
和float
s,而不是list
1 {} str
(包括回显时的引号):
>>> import ast
>>> [ast.literal_eval(x) for x in l]
[1, 2, 3, 4.5]
与普通eval
不同,这不会打开安全漏洞,因为它无法执行任意代码。
您可以在map
使用ast.literal_eval
来提升性能(因为map
是C中实现的内置功能;通常情况下,map(ast.literal_eval, l)
获得很少或输掉列表推导力,在Py 2,map
或Py3中(其中list
返回生成器,而不是list(map(ast.literal_eval, l))
),>>> print('[{}]'.format(', '.join(l)))
[1, 2, 3, 4.5]
如果目标纯粹是为了显示没有引号的字符串,那么您只需手动格式化并完全避免类型转换:
cart = get_shopping_cart(request) #if I print(cart) I get <obj>
cart.add_item(prod, prod.img, prod.UMP, int(quan), prod.price) #error
def get_shopping_cart(request, cart_class=Cart):
return request.session.get('cart', None) or cart_class()
答案 1 :(得分:2)
引号不是列表中字符串的一部分,因此无法删除它们。输出显示列表元素周围的引号,表示您正在处理字符串。
您可以将列表['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]
然而,这不是&#34;删除引号&#34;从列表中的项目,它将您的字符串列表转换为浮点列表。打印时,浮动不会显示引号,因为它们不是字符串。
答案 2 :(得分:1)
['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]
答案 3 :(得分:0)
您的下一行不起作用的原因是您有一个ll
而不是l