我有一个类似alist = ['4', '1.6', 'na', '2e-6', '42']
的python列表。如果我想从中删除引号并使其看起来像[4, 1.6, na, 2e-6, 42]
,通常我使用以下代码:
alist = [float(x) if type(x) is str else None for x in alist]
但是这次,因为我将字符串'na'
作为列表中的元素之一,所以这行代码不起作用。在python中有一种优雅的方法吗?
答案 0 :(得分:1)
假设您很乐意将值'na'
替换为None
,或者更常见的是,使用None
替换任何非浮动文本,那么您可以执行以下操作:
def converter(x):
try:
return float(x)
except ValueError:
return None
alist = [converter(x) for x in alist]
这会将任何内容转换为浮点数。所以,就目前而言,这也会将现有数字转换为浮点数:
>>> [converter(x) for x in ('1.1', 2, 'na')]
[1.1, 2.0, None]
答案 1 :(得分:0)
当打印出python列表,集合,dicts等时,它们的打印格式与python用于编译“原始代码”的格式相同。 Python用引号编译列表。所以你只需要遍历列表。
只需使用生成器表达式来修复此问题(尽管除非您在tkinter小部件或其他内容上显示,否则它确实没有太大作用):
>>> alist = ['4', '1.6', 'na', '2e-6', '42']
>>> for a in alist:
... print(a)
>>> 4
>>> 1.6
>>> na
>>> 2e-6
>>> 42
我不确定“na”,“nan”混淆来自哪里。无论如何,如果您想丢失引号,请通过生成器表达式运行代码,它将不再位于“列表类”下 - 因此,引号将不再出现。
列表元素仍然是相同类型,
编辑:清晰度,语法