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

2024-09-29 23:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个列表abc.In公司在第一个循环中,我检查前面的元素是否大于第一个元素(start\u equity)。如果是,我重新分配当前元素=start\u equity,并根据当前元素的索引进行检查。问题是第二个循环。在第二个循环中,我想比较索引的值和前面元素的最大值,如果满足条件,则应该将score附加到scorelist。请谁来帮我一下。我对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))

期望的答案是scorelist=[0,0,1,0,1,2,0,0,1,2]


Tags: in元素列表forindexifcount公司
2条回答

干得好,你开始尝试,勇敢地寻求帮助。让我们看看这里。。。你知道吗

看,还没有定义。你知道吗

max();必须至少有一个元素,否则会引发异常,使Python崩溃。有这样一条线就行了:

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

我在那个街区写了一个“继续”。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]。你知道吗

我还是不完全清楚你想做什么。但是我猜输出应该是这样的:如果abc中的前一个元素更大或不存在,那么赋值0,否则将数字增加1。你知道吗

至少,这段代码是这样做的:

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,2,3...替换像1,1,1...这样的序列

相关问题 更多 >

    热门问题