Ich mag würde wissen, ob es eine „pythonic“ Art und Weise ist das mathematische argmin/argmax für eine Memberfunktion ohne mit Bibliothek wie numpy zu verwenden.Python - argmin/argmax für Memberfunktion
Ich habe eine Klasse mit einer Mitgliedsfunktion innerhalb der eine ganze Zahl zurückgibt. Ich instanziiere mehrere Objekte dieser Klasse. Ich möchte wissen, welches Objekt den niedrigeren Rückgabewert für diese Methode hat.
Hier finden Sie meinen Quellcode. Der Teil, den ich verbessern möchte, ist nur nach dem Tag Code, den ich gerne verbessern würde. Dieser Code funktioniert sehr gut, aber ich bin mir ziemlich sicher, dass es einen besseren Weg gibt, dasselbe zu tun. Hier
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""argmin example"""
class People(object):
"""People class"""
ret_ages = {"Half": 60, "AlmostFull": 65, "Full": 71} # years
def __init__(self, name, age, ret_mode):
super(People, self).__init__()
if ret_mode not in self.ret_ages.keys():
raise KeyError(ret_mode + " not in " + str(self.ret_ages.keys()))
self.name = name
self.age = age
self.ret_mode = ret_mode
def get_remaining_years(self):
"""
Return how many years People have still to work before earning
<rate> retirement.
<rate> could be "Half", "Middle" or "Full".
"""
try:
return self.ret_ages[self.ret_mode] - self.age
except KeyError:
raise KeyError("rate has to be in " + str(self.ret_ages.keys()))
def main():
"""Main function"""
people_list = [
People("Juliette", 35, "Full"),
People("Coralie", 26, "Half"),
People("Laura", 27, "AlmostFull")
]
# Debugging print
for people in people_list:
print people.name, "has still to work",\
people.get_remaining_years(), "years."
print
# End of debugging print
############################
# Code I'd like to improve #
############################
people_closer_to_ret = people_list[0]
minimum_remainining_years = people_closer_to_ret.get_remaining_years()
for people in people_list:
if people.get_remaining_years() < minimum_remainining_years:
people_closer_to_ret = people
minimum_remainining_years = people.get_remaining_years()
minimum_remainining_years = people.get_remaining_years()
###################################
# End of code I'd like to improve #
###################################
print people_closer_to_ret.name, "will be retired soon !"
if __name__ == '__main__':
main()
ist die Ausgabe dieses Skripts:
Juliette has still to work 36 years.
Coralie has still to work 34 years.
Laura has still to work 38 years.
Coralie will be retired soon !