我在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 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
答案 0 :(得分:3)
我假设您有一个普通的Python list
,而不是NumPy np.ndarray
。
很容易想到就地解决方案比创建新列表更有效。实际情况并非如此,O(n)复杂性无法克服,因为您需要至少检查一次每个元素。
因此您可以为此使用列表理解:
res = [i for i in L if i != [0, 0]]
确实,重复的list.remove
调用将效率低下:每个 list.remove
调用具有O(n)time complexity。
答案 1 :(得分:1)
如果您只想删除[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))
答案 2 :(得分:0)
column1
答案 3 :(得分:0)
使用
>>> elements = [[(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]]
我们可以编写一个list
理解力
>>> [element for element in elements if element != [0,0]]
或(更易于理解的IMO)带有谓词
def is_valid(element):
return element != [0, 0]
我们可以像使用filter
built-in
# wrapping in ``list`` because in Python3 ``filter`` returns iterator
>>> list(filter(is_valid, elements))
[[(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]]
答案 4 :(得分:0)
产生相同结果的另一种方法是过滤列表并创建一个新列表:
a = [e for e in a if any(e)]
您还可以使用内置的filter
函数:
a = list(filter(any, a))
这样可以避免每次从列表中删除元素时都转移所有元素。
答案 5 :(得分:0)
需要根据元素的条件删除列表(即列表列表)中的列表时的解决方案。在这里,如果任何元素是NaN,我们将删除任何列表。使用e == e测试NaN。 lofl是列表的列表。
newlofl = [l for l in lofl if all(e == e for e in l)]
有人对这种情况有更快,更好的方法吗?