content2 = [-0.112272999846, -0.0172778364044, 0,
0.0987861891257, 0.143225416783, 0.0616318333661,
0.99985834, 0.362754457762, 0.103690909138,
0.0767353098528, 0.0605534405723, 0.0,
-0.105599793882, -0.0193182826135, 0.040838960163,]
for i in range((content2)-1):
if content2[i] == 0.0:
content2[i] = None
print content2
需要制作:
content2 = [-0.112272999846, -0.0172778364044, None,
0.0987861891257, 0.143225416783, 0.0616318333661,
0.99985834, 0.362754457762, 0.103690909138,
0.0767353098528, 0.0605534405723, None,
-0.105599793882, -0.0193182826135, 0.040838960163,]
我也尝试了其他各种方法。有人有想法吗?
答案 0 :(得分:6)
您应该避免在Python中使用索引进行修改
>>> content2 = [-0.112272999846, -0.0172778364044, 0, 0.0987861891257,
0.143225416783, 0.0616318333661, 0.99985834, 0.362754457762, 0.103690909138,
0.0767353098528, 0.0605534405723, 0.0, -0.105599793882, -0.0193182826135,
0.040838960163]
>>> [float(x) if x else None for x in content2]
[-0.112272999846, -0.0172778364044, None, 0.0987861891257, 0.143225416783, 0.0616318333661, 0.99985834, 0.362754457762, 0.103690909138, 0.0767353098528, 0.0605534405723, None, -0.105599793882, -0.0193182826135, 0.040838960163]
要将content2
变为此列表理解的结果,请执行以下操作:
content2[:] = [float(x) if x else None for x in content2]
您的代码无效,因为:
range((content2)-1)
您试图从1
中减去list
。此外,range
端点独占(它会移至端点- 1
,您再次从中减去1
)所以您的意思是{{1 }}
您对代码的修改有效:
range(len(content2))
使用Python中for i in range(len(content2)):
if content2[i] == 0.0:
content2[i] = None
等于int
的隐含事实判断为false更好,所以这也同样合适:
0
您可以习惯为列表和元组执行此操作,而不是按照PEP-8
的建议检查for i in range(len(content2)):
if not content2[i]:
content2[i] = None
我建议的列表理解:
if len(x) == 0
在语义上等同于
content2[:] = [float(x) if x else None for x in content2]
答案 1 :(得分:3)
你应该在这里使用list comprehension:
>>> content2[:] = [x if x!= 0.0 else None for x in content2]
>>> import pprint
>>> pprint.pprint(content2)
[-0.112272999846,
-0.0172778364044,
None,
0.0987861891257,
0.143225416783,
0.0616318333661,
0.99985834,
0.362754457762,
0.103690909138,
0.0767353098528,
0.0605534405723,
None,
-0.105599793882,
-0.0193182826135,
0.040838960163]
答案 2 :(得分:1)
稍微修改一下代码会得到所需的结果:
for i in range(len(content2)):
if content2[i]==0:
content2[i] = None
在您的代码中,您从行中的列表中减去一个整数:
for i in range((content2)-1):
但未定义从列表中减去整数。 len(content2)返回一个整数,该整数等于列表中的元素数,这就是你想要的。