Python 2.7 列表操作以提取大于当前和剩余索引值的值

Python 2.7 列表操作以提取大于当前和剩余索引值的值,python-2.7,list,if-statement,for-loop,Python 2.7,List,If Statement,For Loop,我有以下清单: elev=[0.0632.8629.9626.5623.7620.7620.7620.7620.7620.7606.22602.0606.6613.22608.4599.583.6] 理想情况下,它应该按降序排列,但602.0小于接下来的3个值(606.6613.2608.4),每次出现此问题时,我都需要对这些值进行计数。我正在尝试嵌套for循环来计算这些值,如下所示: l = len(et) for i in xrange(1,l-1,1): for j in

我有以下清单:

elev=[0.0632.8629.9626.5623.7620.7620.7620.7620.7620.7606.22602.0606.6613.22608.4599.583.6]

理想情况下,它应该按降序排列,但
602.0
小于接下来的3个值
(606.6613.2608.4)
,每次出现此问题时,我都需要对这些值进行计数。我正在尝试嵌套for循环来计算这些值,如下所示:

l = len(et)    
for i in xrange(1,l-1,1):
    for j in xrange(1,l-1,1):
        if (et[i] < et[j]):
            print et[i]
l=len(et)
对于X范围内的i(1,l-1,1):
对于X范围内的j(1,l-1,1):
如果(et[i]

但是我得到的所有值都大于
602.0
。如何限制循环只计算这3个值?感谢您的建议。

我想这会解决您的问题:

l = len(et)    
for i in xrange(1,l-1,1):
    if et[i] < et[i+1]:
        for j in xrange(i,l-1,1):
            if (et[i] < et[j]):
                print et[j]
l=len(et)
对于X范围内的i(1,l-1,1):
如果et[i]
它将打印大于数字的值,不是所有值,而是仅打印数字后面的值

这是我从终端得到的信息:

>>> for i in xrange(1,l-1,1):
...     if et[i] < et[i+1]:
...             print "for",et[i]
...             for j in xrange(i,l-1,1):
...                     if (et[i] < et[j]):
...                             print et[j]
...
for 602.0
606.6
613.2
608.4
for 606.6
613.2
608.4
X范围(1,l-1,1)中的i的
>>:
...     如果et[i]
l_elev=len(elev)
gt_cnt=0
等式=0
slp_idx=[]
对于X范围内的i(1,l_elev-3,1):
#以下将处理大于当前值的反转
如果elev[i+gt_cnt]=elev[i+gt_cnt]]
gt_cnt+=1
对于x范围内的x(i,i+len(gt_inv),1):
slp_idx.append(x)
#下面将处理相邻的相等值
如果(elev[i+eq_cnt]-elev[i+eq_cnt+1])==0:
cnew=elev[i:]
eq_inv=[y代表cnew中的y,如果y==elev[i+eq_cnt]]
等式cnt+=1
对于X范围内的y(i,i+len(eq_inv),1):
slp_idx.append(y)
#中断循环以避免索引外错误
如果i+gt\u cnt>l\u elev:
打破

第一个元素是否始终为零?您的607.4条目的顺序不正确(613.2和608.4较大),因此序列中有很多反转。你想如何计算倒数?对于607.4,其后面有2个较大的值;对于603.2,有3个;对于602.0,有3个;对于606.6,有2个。那么,你是否应该得到10个计数(打印10个值)?我想保持顺序。只想跟踪第一个符合标准<代码> > ET[i] [ET+[1] 1 / <代码>,即<代码> 602 < /代码> @ NinjaGaiden,可能但不一定,如果你在大列表上做这些操作,也许考虑使用NUMPY?如果我使用不同的列表,计数会有所不同,因此使用
count<3
是不可行的。我想你需要从I开始第二个循环,然后现在检查答案。它给出的是所有更大的值,而我只需要比当前值大的值和剩余的索引值。这只是针对当前值给出的。等一下,让我再加一行,这样你会更清楚。@Ibe现在检查答案,它只打印大于当前值的值。
et[i]
对你的答案和问题进行了投票。请你对我的回答也这样做。
l_elev = len(elev)
gt_cnt = 0
eq_cnt = 0
slp_idx = []
for i in xrange(1,l_elev-3,1):
    # following will take care of greater than current value inversion
    if elev[i+gt_cnt] < elev[i+1+gt_cnt]:
        lnew = elev[i+gt_cnt:]
        gt_inv = [y for y in lnew if y >= elev[i+gt_cnt]]
        gt_cnt += 1
        for x in xrange(i,i+len(gt_inv),1):
            slp_idx.append(x)

    # following will take care of adjacent equal values
    if (elev[i+eq_cnt] - elev[i+eq_cnt+1]) == 0:
        cnew = elev[i:]
        eq_inv = [y for y in cnew if y == elev[i+eq_cnt]]
        eq_cnt+=1
        for y in xrange(i,i+len(eq_inv),1):
            slp_idx.append(y)
    # break loop to avoid out of index error
    if i+gt_cnt > l_elev:
        break