如何通过将每个索引值与以前的最大值进行比较来创建新列表?

时间:2018-01-10 21:28:30

标签: python python-2.7

下面是一个列表abc。在第一个循环中,我检查前面的元素是否大于第一个元素(start_equity)。如果是,我重新分配当前元素= start_equity并从当前元素的索引执行chek。问题是第二次循环。在第二个循环中,我想比较索引的值与先前元素的最大值,如果满足条件,则应将分数附加到分数列表。请有人帮我这个。我对python知之甚少。

abc= [150,110,120,0,0,160,120,-200,140,150]


count= 0
Look = 0
score = 0
scorelist=[]


startequity =  abc[0]
for (index, item) in list(enumerate(abc)):
    if abc[index] < startequity:
        startequity = abc[index]
        Look = Look + 1
        scorelist = scorelist + [0]

    if abc[index] > max(abc[Look:index]):
        count = count + 1
        score = score + count
        scorelist.append((score))

所需答案是得分列表= [0,0,1,0,1,2,0,0,1,2]

2 个答案:

答案 0 :(得分:2)

为你的首发尝试做得很好,并且勇敢地寻求帮助。我们在这看......

看起来尚未确定。

MAX();必须至少有一个元素或它引发异常,崩溃Python。拥有这样的一行会起作用:

if index == 0:
    scorelist = scorelist + [0]
    continue

我在该区块中放了一个“继续”。继续告诉Python忘记循环中的其他所有内容,然后在for循环中继续下一个循环。

值得注意的是,以下3行都在列表的末尾添加了一个元素,但在整个代码中使用相同的表示法是很好的约定:

scorelist = scorelist + [0]
scorelist.append(0)
scorelist += [0]

最终代码(编辑版):

abc= [150,110,120,0,0,160,120,-200,140,150]

score = 0
scorelist=[]

for (index, item) in list(enumerate(abc)):
    if index == 0:
        scorelist.append(0)
        continue

    if abc[index] < abc[index-1]:
        scorelist.append(0)
        score = 0

    else:
        score = score + 1
        scorelist.append((score))

print(scorelist)

这将返回问题中提到的[0,0,1,0,1,2,0,0,1,2]。

答案 1 :(得分:1)

我仍然不是100%清楚,你尝试做什么。但我想输出应该如下:如果abc中的前一个元素更大或不存在,则分配零,否则将数字增加一个。

这至少是这段代码的作用:

abc= [150,110,120,0,0,160,120,-200,140,150]

res = [0]
for i in [[1, 0][u - v < 0] for u, v in zip(abc[1:], abc[:-1])]:
    if i == 0:
        count = 0
    else:
        count += 1
    res.append(count)

print(res)

说明: [[1, 0][u - v < 0] for u, v in zip(abc[1:], abc[:-1])]是一种列表理解,根据与前一个元素的比较来指定01。这排除了第一个元素,其分数设置为0。 然后,for loop会忽略0,并将1,1,1...等系列替换为1,2,3...