如何在 Python 中根据条件删除列表元素

新手上路,请多包涵

我在 python 中有以下二维数组

[[(0, 0, 0), 337.94174378689814],
[(0, 0, 1), 339.92776762374007],
[(0, 0, 2), 338.78632729456444],
[(0, 1, 0), 344.85997106879347],
[(0, 1, 1), 331.6819890120493],
[0, 0]]

我想删除其中有 0 个值的元素输出是 ARIMA order and corresponding AIC score 我从下面的代码生成

a = [[0]*2 for x in range(27)]

for i in range(len(pdq)):
   try:
      mod =  ARIMA(train, order = pdq[i])
      results = mod.fit(disp=False)
      a[i][0] = pdq[i]
      a[i][1] = results.aic
      if a[i][1] == 0:
         a.remove(a[i])
   except:
       continue

我想删除数组中同时存在 0 的值。我该怎么做 if condition described above

原文由 Neil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

如果你只想删除 [0,0] 你可以这样做:

 a = [[(0, 0, 0), 337.94174378689814],
     [(0, 0, 1), 339.92776762374007],
     [(0, 0, 2), 338.78632729456444],
     [(0, 1, 0), 344.85997106879347],
     [(0, 1, 1), 331.6819890120493],
     [0, 0]]

while True:
    try:
        a.remove([0, 0])
    except ValueError:
        break

或者使用过滤器:

 a = list(filter(lambda x: x != [0, 0], a))

原文由 James Liu 发布,翻译遵循 CC BY-SA 4.0 许可协议

我假设你有一个普通的 Python list ,而不是 NumPy np.ndarray

人们很容易认为就地解决方案比创建新列表更有效。事实并非如此,O(n) 的复杂性无法超越,因为您需要至少检查每个元素一次。

因此,您可以为此使用列表理解:

 res = [i for i in L if i != [0, 0]]

事实上,重复 list.remove 调用将是低效的: 每个 list.remove 调用具有 O(n) 时间复杂度

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题