Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中基于条件删除列表元素_Python_List - Fatal编程技术网

如何在Python中基于条件删除列表元素

如何在Python中基于条件删除列表元素,python,list,Python,List,我在python中有以下2D数组 [[(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顺序和相应的AIC分数,我从下面的代码生成 a = [[0]*2 for

我在python中有以下2D数组

[[(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顺序和相应的AIC分数,我从下面的代码生成

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
的值。如果出现上述情况,我如何在
中执行此操作

如果您只想删除[0,0],则可以这样执行:

m = [[(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]]

for r in m:
    if [0,0] in r:
        m.remove(r)
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))

我们可以写一份清单

>>> [element for element in elements if element != [0,0]]
或者(我更容易理解)带谓词

def is_valid(element):
    return element != [0, 0]
我们可以用like


我假设您有一个常规的Python
列表,而不是NumPy
np.ndarray

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

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

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

事实上,重复的
list.remove
调用将效率低下:每个
list.remove
调用都有O(n)。

产生相同结果的不同方法是过滤列表并创建一个新的列表:

a = [e for e in a if any(e)]
您还可以使用内置的
过滤器
功能:

a = list(filter(any, a))

这样可以避免在每次从列表中删除一个元素时将所有元素移动。

根据元素的条件需要删除列表中的列表(即列表列表)时的解决方案。这里我们删除任何元素为NaN的列表。使用e==e测试NaN。lofl是列表的列表

newlofl = [l for l in lofl if all(e == e for e in l)]

有人有更快更好的方法来解决这种情况吗?

是否只删除最后一个[0,0]项?是的,只要有[0,0]项,我们就应该删除itArray或list?这是有区别的。@jpp删除,直到列表中没有[0,0]为止。我相信这将具有O(m*n)复杂性。它必须多次通过该列表才能获得所有结果。@jpp是的,很慢。那么如何从上面获得最低AIC分数指数呢?@Neil,这是一个单独的问题,我建议你问一个新问题。
a = list(filter(any, a))
newlofl = [l for l in lofl if all(e == e for e in l)]