使用循环或 stack/queue 按顺序比较列表中的元素
Comparing elements in a list in order using loop or stack/queue
我有一个包含 0 到 100 之间的整数元素的列表 ls
。我想构建一个函数来计算多个元素,直到它遇到一个具有更大值的元素,并将计数附加到解决方案列表。
换句话说,如果ls = [5, 10, 1, 1, 20, 1]
,解应该是[1, 3, 2]
:
1
来自第一个元素,5
3
来自第二到第四个元素,10, 1, 1
2
来自最后两个元素,20, 1
(如果ls = [7, 3, 9]
,return应该是[2,1]
。)
我使用 for
循环来执行任务:
def compare_and_count(ls):
answer = []
num = 1
ref = 0
for j in range(1, len(ls)):
try:
if ls[ref + j] <= ls[ref]:
num += 1
else:
answer.append(num)
num = 1
ref = ref + j
except IndexError:
break
answer.append(num)
return answer
我试图对两个可移动引用进行值比较,但这会引发 IndexError
并且有时还会忽略最终计数,因此 return 是一个不正确的列表。 (我加了try...except
是为了免去IndexError
,但是后面的问题还是没有解决)
我假设 loop
或 stack/queue
是解决此问题的最简洁方法,但我还无法找到最佳方法。任何见解表示赞赏。
编辑了答案以更正它。
def my(a):
count = 1
maxval = a[0]
answer = []
for i in range(1, len(a)):
if a[i] > maxval:
maxval = a[i]
answer.append(count)
count = 1
else:
count += 1
answer.append(count)
return answer
I tried to do a value comparison with two movable references
您不需要,只需一个移动索引 i
和一个带有 maxval
的 count
计数器来检查条件。
我有一个包含 0 到 100 之间的整数元素的列表 ls
。我想构建一个函数来计算多个元素,直到它遇到一个具有更大值的元素,并将计数附加到解决方案列表。
换句话说,如果ls = [5, 10, 1, 1, 20, 1]
,解应该是[1, 3, 2]
:
1
来自第一个元素,5
3
来自第二到第四个元素,10, 1, 1
2
来自最后两个元素,20, 1
(如果ls = [7, 3, 9]
,return应该是[2,1]
。)
我使用 for
循环来执行任务:
def compare_and_count(ls):
answer = []
num = 1
ref = 0
for j in range(1, len(ls)):
try:
if ls[ref + j] <= ls[ref]:
num += 1
else:
answer.append(num)
num = 1
ref = ref + j
except IndexError:
break
answer.append(num)
return answer
我试图对两个可移动引用进行值比较,但这会引发 IndexError
并且有时还会忽略最终计数,因此 return 是一个不正确的列表。 (我加了try...except
是为了免去IndexError
,但是后面的问题还是没有解决)
我假设 loop
或 stack/queue
是解决此问题的最简洁方法,但我还无法找到最佳方法。任何见解表示赞赏。
编辑了答案以更正它。
def my(a):
count = 1
maxval = a[0]
answer = []
for i in range(1, len(a)):
if a[i] > maxval:
maxval = a[i]
answer.append(count)
count = 1
else:
count += 1
answer.append(count)
return answer
I tried to do a value comparison with two movable references
您不需要,只需一个移动索引 i
和一个带有 maxval
的 count
计数器来检查条件。