删除列表中的单引号,拆分字符串,避免使用引号

时间:2016-02-09 21:39:15

标签: python string split quotes

是否可以拆分字符串并避免引号(单个)?

我想从列表中删除单引号(保留列表,字符串和浮点数:

l=['1','2','3','4.5']

期望的输出:

l=[1, 2, 3, 4.5]

下一行既不适用于int也不适用于float

l=[float(value) for value in ll]

4 个答案:

答案 0 :(得分:3)

要根据每个值的显示得到intfloat'1'变为1"1.2"变为1.2,可以use ast.literal_eval以与Python文字解析器相同的方式进行转换,因此您实际拥有listintfloat 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