我正在尝试编写一个递归函数,该函数返回已交换相邻元素的列表的副本。例如,swapElements([2,3,4,9])将返回[3,2,9,4]。
到目前为止,这是我的代码:
def swapElements(mylist):
if len(mylist) == 1:
pass
if len(mylist) == 2:
mylist[0], mylist[1] = mylist[1], mylist[0]
else:
mylist[0], mylist[1] = mylist[1], mylist[0]
swapElements(mylist[2:])
return mylist
当我运行此函数时,它仅返回交换了前两个元素的列表,有人知道为什么此函数不交换除前两个元素之外的任何其他元素吗,我该如何解决?
答案 0 :(得分:0)
在您的问题中,它表示您希望返回副本。您的函数会原位改变mylist
。此外,pass
的返回值为None
。您可以像这样简化功能-
def swap (a = []):
if len(a) < 2:
return a
else:
return [ a[1], a[0] ] + swap(a[2:])
print(swap([2, 3, 4, 9]))
# [2, 3, 4, 9]
print(swap([2, 3, 4, 9, 6]))
# [2, 3, 4, 9, 6]
print(swap([1]))
# [1]
print(swap())
# []
答案 1 :(得分:0)
我让递归完成工作,如果是Python 3,则做一些不太面向索引的事情,例如:
def swapPairs(array):
if len(array) < 2:
return array
a, b, *rest = array
return [b, a, *swapPairs(rest)]