Python 从列表中删除非递增的连续元素,直到列表中的每个连续元素递增为止
换句话说,我有一个列表元素(例如mass),它应该随着时间的推移而增加。下面是一个示例列表:从最后一个元素Python 从列表中删除非递增的连续元素,直到列表中的每个连续元素递增为止,python,loops,Python,Loops,换句话说,我有一个列表元素(例如mass),它应该随着时间的推移而增加。下面是一个示例列表:从最后一个元素179.2开始,后面的每个元素都应该增加。我们看到他们的实例不符合此标准(在278.8之后) 虽然这是一个例子,但我有实际的数据,这些数据的长度也不同。因此,理想情况下,我试图通过迭代每个列表来解析这些列表,直到每个元素都比它的前一个元素增加 我可以按递增顺序重新排列列表,直到实际列表看起来与重新排列的列表匹配: import numpy as np check = masst == so
179.2
开始,后面的每个元素都应该增加。我们看到他们的实例不符合此标准(在278.8
之后)
虽然这是一个例子,但我有实际的数据,这些数据的长度也不同。因此,理想情况下,我试图通过迭代每个列表来解析这些列表,直到每个元素都比它的前一个元素增加
我可以按递增顺序重新排列列表,直到实际列表看起来与重新排列的列表匹配:
import numpy as np
check = masst == sorted(masst, reverse=True)
while(check==False):
bool_ = [] # list of true and false statements
for i in range(0, len(masst)-1):
inc = masst[i] >= masst[i+1]
bool_.append(inc)
masst = list(np.array(masst)[bool_])
这样做,我似乎陷入了一个巨大的循环!我对我的方法有点困惑。有一个问题:
while(check==False):
总是满意的,因为变量check
没有更新。Check只包含值True
或False
,不进行更新,无论masst
看起来如何,它都不会改变。(再次查看代码,我不知道当您只需要一个循环时,为什么要同时使用for
和while
循环。我认为您需要首先组织您的想法:)如果要从列表中移动非递减元素,请尝试以下操作:
i = 1
while i < len(masst):
if masst[i] > masst[i-1]:
del masst[i-1]
i = i-1 or 1
else:
i += 1
i=1
而我masst[i-1]:
德尔马斯特[i-1]
i=i-1或1
其他:
i+=1
这将从索引1开始,并在每次迭代中检查当前编号之前的编号。如果它较低,它将删除它,然后当前数字的索引将减少1,因此我们向后移动(但决不在索引1之前)。否则,我们将继续前进。这将删除列表中小于其后面的元素的所有元素
i = 1
while i < len(masst):
if masst[i] > masst[i-1]:
del masst[i-1]
i = i-1 or 1
else:
i += 1