繁体   English   中英

排序方法如何在python内部工作?

[英]How sort method works internally in python?

我知道对你们中的一些人来说这可能是一个愚蠢的问题,但对我来说却是一个困惑。 它是如何在不分配给变量的情况下工作的,以及它的更新值如何可用。

此代码打印排序列表

Python代码

data=[23,11,32,89,52,99]
data.sort()
print(data)

它的工作方式与此代码相同:

class Thing:
    def __init__(self, value):
        self.value = value
    def modify(self):
        self.value += 1

data = Thing(5)
print(data.value)  # prints '5'

data.modify()
print(data.value)  # prints '6'

基本上,它修改对象的内部状态。 列表对象将其值存储在内存的某个区域(即,某个内部变量中),而sort方法以对列表值进行排序的方式与该内部变量混淆。

您的变量data是一个列表。 列表有一个名为sort的方法,它对列表进行排序并更新这些值。 您可以通过输入dir(data)甚至直接在数据类型dir(list)上查看所有方法。

这与sorted()函数不同,后者对列表进行排序并返回排序后的值,但不更新原始列表。

data=[23,11,32,89,52,99]
print(sorted(data))  # Returns sorted list
print(data)  # Original is not modified
data.sort()  # Modifies original
print(data)

那是因为list.sort()方法就地修改了列表。 其他方法如sorted()不会修改列表。 例如:

data=[23,11,32,89,52,99]
sorted(data)
print(data)

Out:
[23, 11, 32, 89, 52, 99]

分配:

data=[23,11,32,89,52,99]
data = sorted(data)
print(data)

Out:
[11, 23, 32, 52, 89, 99]

所以这取决于方法的结构。 希望能帮助到你。

列表是一个对象

class list(object):
    """
    list() -> new empty list
    list(iterable) -> new list initialized from iterable's items
    """
    def append(self, p_object): # real signature unknown; restored from __doc__
        """ L.append(object) -> None -- append object to end """
        pass
    def sort(self, key=None, reverse=False): # real signature unknown; restored from __doc__
        """ L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """
        pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM