我在一个程序中有一个函数,它要求我按特定的顺序组织一个列表,但是在函数解析后我的列表会被清空吗?我的功能出了什么问题,如何修复?你知道吗
myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def organizeList(li):
finalList = []
sortList = li
sortList.sort()
for x in range(len(li)):
pop = sortList.pop()
if len(finalList) % 2 == 0:
finalList.append(pop)
else:
finalList.insert(0, pop)
return finalList
print(myList) # Returns [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(organizeList(myList)) # Returns [1, 3, 5, 7, 9, 10, 8, 6, 4, 2]
print(myList) # Returns []
替换
与
你知道吗列表.pop()删除列表的第0个元素,除非提供了索引,例如列表.pop(2) 等等
在您的情况下,您只需要索引,而不是从列表中删除元素。你知道吗
从https://stackoverflow.com/a/986145/1400623:
您的
sortList
、li
和myList
指向被sortList.pop()
清空的同一个对象 改为用cloning/copying来解决这个问题,例如:sortList=li[:]
这是因为Python从不复制在函数调用期间传递的对象。您的列表是通过引用传递的,而不是通过值传递的。因此,当您执行
sortList = li
然后sortList.pop()
时,实际上是在处理原始的myList
列表(这不是您想要的,因为您稍后会使用pop()
修改它)。你知道吗为了避免这种情况,您需要复制列表,这正是
list()
函数所做的。你知道吗请尝试以下代码:
相关问题 更多 >
编程相关推荐