【发布时间】:2019-02-05 12:57:20
【问题描述】:
我是python嵌套循环的学习者。
下面我已经编写了我的代码。我想让我的代码更简单,因为当我运行代码时需要很长时间才能产生结果。
我有一个包含 1000 个值的列表:
Brake_index_values = [ 44990678, 44990679, 44990680, 44990681, 44990682, 44990683,
44997076, 44990684, 44997077, 44990685,
...
44960673, 8195083, 8979525, 100107546, 11089058, 43040161,
43059162, 100100533, 10180192, 10036189]
我将第 1 个元素存储在另一个列表中
original_top_brake_index = [Brake_index_values[0]]
我创建了一个名为 temp 的临时列表和一个用于循环迭代的 numpy 数组:
temp =[]
arr = np.arange(0,1000,1)
循环操作:
for i in range(1, len(Brake_index_values)):
if top_15_brake <= 15:
a1 = Brake_index_values[i]
#a2 = Brake_index_values[j]
a3 = arr[:i]
for j in a3:
a2 = range(Brake_index_values[j] - 30000, Brake_index_values[j] + 30000)
if a1 in a2:
pass
else:
temp.append(a1)
if len(temp)== len(a3):
original_top_brake_index.append(a1)
top_15_brake += 1
del temp[:]
else:
del temp[:]
continue
我正在比较Brake_index_values[0]元素前后30000范围内可用的Brake_index_values[1]元素,即`range(Brake_index_values[0]-30000, Brake_index_values[0]+30000)。
如果Brake_index_values[1] 在该范围之间可用,我应该忽略该元素并转到下一个元素Brake_index_values[2] 并遵循与之前Brake_index_values[0] 和Brake_index_values[1] 相同的过程
如果可用,则将值存储在original_top_brake_index 彻底追加操作中。
换句话说:
(让我们取 3 个值 a、b 和 c。我正在检查值 b 是否在 (a-30000 到 a+30000) 之间的范围内。可能性 1:如果 b 介于 (a-30000 到 a+) 之间30000) ,忽略那个元素(这里我存储在一个临时列表中)。然后用 c (下一个元素)继续相同的过程 可能性 2:如果 b 不在 b/w 中,则将 b 放在另一个名为 original_top_brake_index 的列表中 (这另一个列表是我需要的实际结果)
我得到的结果:
它正在工作,但是完成操作需要很长时间,有时它会显示 MemoryError。
我只是希望我的代码通过简单的操作更简单高效地工作。
【问题讨论】:
-
所以如果我理解正确,每个后续元素都必须检查它是否在它之前的所有先前元素的
+/- 30000内? -
是的,你是对的 ....@aws_apprentice
-
@aws_apprentice 谢谢你的回答,但它不能满足我的要求。
-
@aws_apprentice 谢谢你的回答,但它不能满足我的要求。例如: val[6] 必须添加到我的原件列表中。原因:对于值 44990678 和 589548954,val[6] 在 +/-3e4 之间不可用。因此必须将其添加到原件中。
标签: python arrays loops numpy for-loop