我在我的函数文件中为此创建了一个函数:
Home
我的主程序看起来像:(我使用了removeNum函数,我遇到了代码底部的问题。)
def removeNum(myList):
listSize = len(myList) -1
loop = 0
while loop < listSize:
if myList[loop] > myList[loop + 1]:
myList.remove(myList[loop + 1])
listSize = listSize - 1
loop = loop + 1
return myList
当我运行程序时,它不打印出从上面的removeNum函数修改过的新列表,我的函数或主程序有问题吗?我没有收到任何错误。任何想法将不胜感激。谢谢。
答案 0 :(得分:4)
解决问题的一种方法是zip
列表,其副本偏移1,然后使用列表推导过滤,如下所示:
ls = [1, 3, 0, 7, 9, 4]
zipped = zip(ls, ls[0:1] + ls[:-1])
ls_filtered = [p[0] for p in zipped if p[0] >= p[1]]
# ls_filtered is now [1, 3, 7, 9]
答案 1 :(得分:1)
你的功能坏了,看看
>>> removeNum([9, 7, 4, 3, 1, 0])
[9, 4, 1]
它跳过号码,原因很简单
def removeNum(myList):
listSize = len(myList) -1
loop = 0
while loop < listSize:
if myList[loop] > myList[loop + 1]:
myList.remove(myList[loop + 1])
listSize = listSize - 1
loop = loop + 1 #<-- here is the problem
return myList
无论情况如何,你提前loop
,当你删除一个元素时不应该这样做,要解决这个问题
def removeNum(myList):
listSize = len(myList) -1
loop = 0
while loop < listSize:
if myList[loop] > myList[loop + 1]:
myList.pop(loop + 1) # as the position is know, use pop
listSize = listSize - 1
else:
loop = loop + 1
return myList
现在它产生了预期的结果
>>> removeNum([9, 7, 4, 3, 1, 0])
[9]
>>>
我不建议在适当的位置修改列表,而是使用结果创建一个新的列表,例如
def make_always_growing(iterable):
current_max = None
result = []
for x in iterable:
if current_max is None or x > current_max:
current_max = x
result.append(x)
return result
这样做的好处是不依赖于iterable
作为列表,这使得它更通用并允许它与元组,生成器和其他任何东西一起使用
你的cade的某些行也不需要像
listSum = 0
for numb in finalDataList:
listSum = listSum + numb
您可以将内置sum
用于此
listSum = sum(finalDataList)
或
functionsFile.firstTen(finalDataList)
functionsFile.lastTen(finalDataList)
如果他们按照名称建议的那样做,那么你可以使用切片来获得
firstTen = finalDataList[:10]
lastTen = finalDataList[-10:]
但由于你没有将结果分配给任何东西,那么你打印出来了吗?
答案 2 :(得分:0)
my_list = [1, 0, 5, 9, 3, 8, 4]
return [item for index, item in enumerate(my_list) if index == 0 or my_list[index] >= my_list[index - 1]]
此代码将迭代my_list
,将当前项目与之前的项目进行比较,只考虑之前的项目。