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

时间:2019-11-21 20:29:06

标签: python python-3.x for-loop if-statement

我有一个作业问题,它要求制作一种算法,该算法将遍历列表中的每个元素,并查看其旁边的数字是否大于当前数字。如果不大于当前数字,则计数器将增加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 

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

2 个答案:

答案 0 :(得分:1)

如果您有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

答案 1 :(得分:0)

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(数字,lambda a,b:a

您也可以做类似的事情

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