如何使用相同的方法快速通过不同属性排序对象列表?
我的班级如下:
class Member:
def __init__(self, name, zip, hire_date, birth_date):
self.id = id
self.name = name
self.zip = zip
self.hire_date = hire_date
self.birth_date = birth_date
def get_name(self):
return self.name
def get_birth_date(self):
return self.birth_date
def get_hire_date(self):
return self.hire_date
def get_zip_code(self):
return self.zip
我需要根据邮政编码,名称,berth_date和hire_date快速对此类对象进行列表。我可以使用各个排序方法来实现这些方法。例如,按邮政编码进行快速排序:
def partition(array, begin, end):
pivot = begin
for i in range(begin+1, end+1):
if array[i].get_zip_code() <= array[begin].get_zip_code():
pivot += 1
array[i], array[pivot] = array[pivot], array[i]
array[pivot], array[begin] = array[begin], array[pivot]
return pivot
def quicksort(array, begin=0, end=None):
if end is None:
end = len(array) - 1
def _quicksort(array, begin, end):
if begin >= end:
return
pivot = partition(array, begin, end)
_quicksort(array, begin, pivot-1)
_quicksort(array, pivot+1, end)
return _quicksort(array, begin, end)
这可以正常工作。但是现在如何使同样的方法在所有属性上起作用;理想情况下,通过将附加参数传递到QuickSort()
定义要排序的属性。我还希望不直接调用对象属性,而是通过使用getter方法。
这是按邮政编码排序后输出的
Name Zip Hire Date Birth Date
Cosmo Kramer 111-222 2019-06-01 1979-08-12
George Costanza 131-212 2016-06-01 1980-08-12
Jerry Seinfeld 223-212 2017-06-01 1981-06-15
John Wayne 323-212 2018-06-01 1962-06-17
My class is as below:
class Member:
def __init__(self, name, zip, hire_date, birth_date):
self.id = id
self.name = name
self.zip = zip
self.hire_date = hire_date
self.birth_date = birth_date
def get_name(self):
return self.name
def get_birth_date(self):
return self.birth_date
def get_hire_date(self):
return self.hire_date
def get_zip_code(self):
return self.zip
I have need to quick sort a list of this class object based on zip code, name, birth_date and hire_date. I can achieve these using individual sort methods. For example, quick sort by zip code:
def partition(array, begin, end):
pivot = begin
for i in range(begin+1, end+1):
if array[i].get_zip_code() <= array[begin].get_zip_code():
pivot += 1
array[i], array[pivot] = array[pivot], array[i]
array[pivot], array[begin] = array[begin], array[pivot]
return pivot
def quicksort(array, begin=0, end=None):
if end is None:
end = len(array) - 1
def _quicksort(array, begin, end):
if begin >= end:
return
pivot = partition(array, begin, end)
_quicksort(array, begin, pivot-1)
_quicksort(array, pivot+1, end)
return _quicksort(array, begin, end)
This works fine. But now how do I make the same method work on all attributes; ideally by passing an additional argument to quicksort()
defining the attribute to sort on. I also wish to not call object attributes directly but by using getter methods.
This is output after sorting by zip code
Name Zip Hire Date Birth Date
Cosmo Kramer 111-222 2019-06-01 1979-08-12
George Costanza 131-212 2016-06-01 1980-08-12
Jerry Seinfeld 223-212 2017-06-01 1981-06-15
John Wayne 323-212 2018-06-01 1962-06-17
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请参阅Python自己的分类功能的实现:
用法:
Refer to the implementation of Python's own sorting function:
Usage:
您可以通过定义同类中的另一种方法来实现这一目标:
You can achieve this by defining another method inside your class:
添加另一个参数,该参数指示
键
要排序,或者只使用内置sort()
方法,该方法执行相同的事情:输出:输出:
Add another parameter that indicates the
key
to sort on, or just use the built-insort()
method which does the same thing:Output: