函数后列表清空

2024-10-01 09:38:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个程序中有一个函数,它要求我按特定的顺序组织一个列表,但是在函数解析后我的列表会被清空吗?我的功能出了什么问题,如何修复?你知道吗

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 []

Tags: 函数程序功能列表len顺序lipop
3条回答

替换

pop = sortList.pop()

pop = sortList[x]

你知道吗列表.pop()删除列表的第0个元素,除非提供了索引,例如列表.pop(2) 等等

在您的情况下,您只需要索引,而不是从列表中删除元素。你知道吗

https://stackoverflow.com/a/986145/1400623

the parameter passed in is actually a reference to an object

您的sortListlimyList指向被sortList.pop()清空的同一个对象 改为用cloning/copying来解决这个问题,例如:sortList=li[:]

这是因为Python从不复制在函数调用期间传递的对象。您的列表是通过引用传递的,而不是通过值传递的。因此,当您执行sortList = li然后sortList.pop()时,实际上是在处理原始的myList列表(这不是您想要的,因为您稍后会使用pop()修改它)。你知道吗

为了避免这种情况,您需要复制列表,这正是list()函数所做的。你知道吗

请尝试以下代码:

def organizeList(_li):
    li = list(_li) # Make an actual copy of the list.
    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

相关问题 更多 >