下面是一个列表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]
答案 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])]
是一种列表理解,根据与前一个元素的比较来指定0
或1
。这排除了第一个元素,其分数设置为0
。
然后,for loop
会忽略0
,并将1,1,1...
等系列替换为1,2,3...