我有一个作业问题,它要求制作一种算法,该算法将遍历列表中的每个元素,并查看其旁边的数字是否大于当前数字。如果不大于当前数字,则计数器将增加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或1个元素-返回0。
您必须遍历数组的长度,而不是遍历元素本身。之间有一个区别:
for i in array
和for 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])