python - python排序中输入变量不可更改的问题

标签 python

我正在编写一系列不同类型的Python方法。我所拥有的是用户输入的数字,我将其转换为列表。然后,我在输入列表上运行 bubble_sort 方法,然后打印结果。我保存了初始输入列表,以便可以使用 Selection_sort 重新排序,但是当我打印出原始列表时,我改为打印 bubble_sorted 列表。我是 python 新手,所以我不确定我是否缺少关于该语言中变量的基本概念。这是我的代码

def listify(i):
    temp_list = []
    input_list_local = []
    input_list_local = list(i)
    for char in input_list_local:
        if char.isdigit():
            temp_list.append(char)
    return temp_list


def bubble_sort(input):
    for i in range(len(input)-1):
        for j in range(len(input)-1):
            if(input[j] > input[j+1]):
                tmp = input[j]
                input[j] = input[j+1]
                input[j+1] = tmp
    return input

def selection_sort(input):
    pass


input = raw_input("enter random numbers here seperated by spaces-> ")
print("you entered "+input)
input_list = listify(input)
print(input_list)
pass_list = input_list
print(bubble_sort(pass_list))
print(input_list) #should print original input list.  Instead prints sorted list

最佳答案

您正在修改相同的列表:pass_list = input_list 意味着pass_list 只是同一列表对象的不同名称。因此,在调用 bubble_sort(pass_list) 后,您不仅修改了 pass_list,还修改了 input_list,因为它们是同一个对象(在内存中)。因此,当您打印 input_list 时,您会看到排序后的列表。

您可以通过执行以下操作来修复它:

pass_list = input_list[:]

这使用 Python's slicing notation 制作 input_list 的副本。然后,您可以安全地对 pass_list 进行排序,并且不会影响原始 input_list

关于python - python排序中输入变量不可更改的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392525/

相关文章:

python - 检测python中的循环依赖

python - Python列表支持 float 吗?什么时候需要整数而浮点却不能?

python - Pandas groupby plot 给出了第一个 plot 两次

python - 如何按月份和年份输入过滤具有日期时间索引的数据框? Pandas

python - 为什么 Python 的日期时间 ISO 函数在逻辑上不正确且存在错误?

python - xarray - 无法序列化坐标

python - 如何将数据从 TCP Python 服务器发送到客户端,反之亦然?

python - 如何从 Python 运行具有干净环境的终端

javascript - 使用 API 和 Python 查找所有可能的字母组合

Python,如何从存储在数据库中的类中实例化类?