递归气泡排序Python与R相比不起作用

2024-10-02 10:33:25 发布

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

我是Python新手。同样的代码在R上也能很好地工作,但我不明白为什么它在Python中不起作用。。。在

Python:

#swap pair
def swap_pair(xpair):
    if xpair[0] > xpair[1]:
        xpair.reverse()
    else:
        xpair
    return xpair

#swap_pass
def swap_pass(xlist):
    for i in range(0,len(xlist)-1):
        xlist[i:i+2] = swap_pair(xlist[i:i+2])
    return xlist

def bubble_sort(data):
    newdata = swap_pass(data)
    if data == newdata:
        return(newdata)
    else:
        return bubble_sort(newdata)

test = [100,6,5,3,2,1]
bubble_sort(test)

Out: [6, 5, 3, 2, 1, 100]

以下是R中运行良好的相同代码:

^{pr2}$

bubble_sort(test)

[1] 1 2 3 5 6 100

你能帮忙吗?在


Tags: 代码testdatareturnifdefpasssort
1条回答
网友
1楼 · 发布于 2024-10-02 10:33:25

您的swap_pass正在进行data变异并返回它。所以在bubble_sort中,data和{}都是对相同的的引用。{6}如果你真的想打电话给两个,那就避免打电话给你了:

def bubble_sort(data):
    newdata = swap_pass(data[:])  # Empty slice copies data before passing to swap_pass
    if data == newdata:
        return(newdata)
    else:
        return bubble_sort(newdata)

或者,让swap_pass为您复制,这样调用者就不需要考虑它了(这通常是Python的方法;Python函数要么对参数进行变异,然后不返回任何内容,要么返回一个新值,并保持参数不变,它们不会改变返回):

^{pr2}$

相关问题 更多 >

    热门问题