Python 查找下一个元素是否小于前一个元素,并将其从列表中删除
我的代码有问题,我正在编写一个方法,该方法将检查下一个元素是否比上一个元素小,如果是,它将删除它 例如: 输入:Python 查找下一个元素是否小于前一个元素,并将其从列表中删除,python,Python,我的代码有问题,我正在编写一个方法,该方法将检查下一个元素是否比上一个元素小,如果是,它将删除它 例如: 输入:[1,20,10,30] def findSmaller(s): i = -1 y = [] while i <= len(s): for j in range(len(s)): if s[i+1] <= s[i]: del s[i + 1] y.
[1,20,10,30]
def findSmaller(s):
i = -1
y = []
while i <= len(s):
for j in range(len(s)):
if s[i+1] <= s[i]:
del s[i + 1]
y.append(s[i])
i += 1
return y
所需输出:[1,20,30]
def findSmaller(s):
i = -1
y = []
while i <= len(s):
for j in range(len(s)):
if s[i+1] <= s[i]:
del s[i + 1]
y.append(s[i])
i += 1
return y
实际输出:[30]
def findSmaller(s):
i = -1
y = []
while i <= len(s):
for j in range(len(s)):
if s[i+1] <= s[i]:
del s[i + 1]
y.append(s[i])
i += 1
return y
def findSmaller(s):
i=-1
y=[]
而我你可以试试这样的东西
def findSmaller(s):
# sets p (previous) as the first value in s
p = s[0]
# initializes y to be an array and sets the first value to p
y = [p]
# iterates over s, starting with the second element
for i in s[1::]:
# checks if i is greater than or equal to the previous element
if i >= p:
# if it is, i is appended to the list y
y.append(i)
# also set the previous value to i, so the next iteration can check against p
p = i
#returns the list
return y
这样做的目的是迭代s
,检查列表中的当前项是否大于或等于列表中的上一个元素。如果是,则将其附加到y
,并返回y
试用代码。如果您不确定循环如何工作,我建议添加一些打印语句。通过这种方式,您可以看到您的循环实际在做什么,尤其是在更复杂的问题中,这非常有用
这样的事情可以解决你的问题
a = [1,2,3,2,4]
for k in range(0,len(a)-2): #-2 so that one don't go past the loops length
#print(k)
y = a
if(a[k]>a[k+1]):
del y[k+1] #delete the k+1 element if it is
根据以后是否需要使用列表进行计算,可以使用生成器
s = [1, 20, 10, 30]
def find_smaller_generator(l: list):
last_item = None
for item in l:
if last_item is None or item >= last_item:
last_item = item
yield item
def find_smaller_list(l: list):
return list(find_smaller_generator(l))
print(find_smaller_list(s))
for i in find_smaller_generator(s):
print(i)
print([i**2 for i in find_smaller_generator(s)])
这将返回:
[1, 20, 30]
1
20
30
[1, 400, 900]
这是你的实际缩进吗?您不希望return语句只缩进一级吗?不要迭代并更改列表。这是错误的。你是什么意思?@BlueMonday列表在python中是可变的,因此s
在方法运行后会发生变化。如果有两个项目比前一个小,例如[30,20,25]
,你希望它是[30]
还是[30,25]
?你能告诉我y=[p]意思是?这将创建一个列表,其中y
是列表中的第一个元素。@BlueMonday我注释了代码中的每一行来解释它。@BlueMonday我刚刚更改了它,它就是这样做的。现在试试看。我提供了一个链接。我不会得到一个索引超出范围的错误吗?编辑:我想不是,我现在明白了,谢谢你提供的信息,谢谢。这至少是一个简单的解释。只有一个有趣的变量,我相信它的名字很好。