如何引用列表中的下一项并将其与前面的项进行比较?



我有一个家庭作业问题,它要求制作一个算法,该算法将遍历列表中的每个元素,并查看它旁边的数字是否大于当前数字。如果它不大于当前数字,则计数器将上升 1,如果它更大,计数器将保持在原位。 我让它工作,但它仅在列表中有超过 3 个项目时才有效。

这是我到目前为止所拥有的:

def count(items):
if len(items) == 0:
    return 0

else:
    count = 0
    for i in items:
        count += 1
        items1 = items[i:]
        items2 = items[i+1:]
        if items1 > items2:
            return count - 1

print (count([42, 7, 12, 9, 2, 5])) #returns 4. works but does not work if len < 3
print (count([])) #returns 0. works
print (count(list(range(10**7))))  # supposed to print out 1 since it's only 1 number, but it just gets stuck and doesn't finish the rest of the program
print (count([99])) # prints out none  
print (count(list(range(10**7,0,-1))))# supposed to print out 10000000 but prints 1 instead 

任何帮助或建议将不胜感激。

如果您有 0 或 1 个元素 - 返回 0。 您必须遍历数组的长度,而不是元素本身。两者之间有区别: for i in arrayfor i in range(0,len(array))

小心range - 打开控制台并键入 python。检查range(10**2)打印的内容。它不是一个元素。 https://www.w3schools.com/python/ref_func_range.asp

def count(items):
    if len(items) == 0 or len(items) == 1:
        return 0
    else:
        count = 0
        for i in range(0,len(items)-1):
            items1 = items[i]
            items2 = items[i+1]
            if items1 > items2:
                count = count + 1
        return count
In general
def count_next_test(numbers, test_fn):
  count = 0
  last = len(numbers) - 1
  for i, n in enumerate(numbers):
    if i < last:
      if test_fn(n, numbers[i+1]):
        count += 1
  return count

在您的情况下:count_next_test(数字,λa,b:a<b(>

你也可以做一些类似的事情

pairs = zip(numbers, numbers[1:])
len([(a,b) for a,b in pairs if a < b])

最新更新