StackOverflow рдЕрдХреНрд╕рд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╢реНрди рдкреВрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдореВрд▓реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рджреГрд╢реНрдпрддрд╛ рдХреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбрд┐рдЧреНрд░реА рд╣реИред рдпрд╣ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИредрдпрд╣рд╛рдБ рдореВрд▓ рдкреНрд░рд╢реНрди рд╣реИ:
рдкрд╛рдЗрдерди рдореЗрдВ рдЙрдкрдЬ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдХреЛрдб (**) рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist >= self._median: yield self._rightchild
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
result, candidates = list(), [self] while candidates: node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance >= min_dist: result.extend(node._values) candidates.extend(node._get_child_candidates(distance, min_dist, max_dist)) return result
рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм _get_child_candidates рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╕реВрдЪреА рд╡рд╛рдкрд╕, рдХреБрдЫ рддрддреНрд╡? рдХреНрдпрд╛ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдмрд╛рдж рдХреЗ рдХреЙрд▓ рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ?
** рдХреЛрдб рдЬреЛрд╣рд╛рди рд╢реБрд▓реНрдЬ (jrschulz) рдХрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдореАрдЯреНрд░рд┐рдХ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦреАред рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: http://well-adjusted.de/~jrschulz/mspace/
рдФрд░ рдпрд╣рд╛рдБ рдЬрд╡рд╛рдм рд╣реИ:
iterators
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрдкрдЬ рдХреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВред рдЬрдирд░реЗрдЯрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
>>> mylist = [1, 2, 3] >>> for i in mylist : ... print(i) 1 2 3
Mylist рдПрдХ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рд╣реИред рдЬрдм рдЖрдк рдПрдХ рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ:
>>> mylist = [x*x for x in range(3)] >>> for i in mylist : ... print(i) 0 1 4
рд╕рдм рдХреБрдЫ рд╣реИ рдХрд┐ "рдХреЗ рд▓рд┐рдП ... рдореЗрдВ ..." рдирд┐рд░реНрдорд╛рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдХ iterable рд╡рд╕реНрддреБ рд╣реИ: рд╕реВрдЪрд┐рдпреЛрдВ, рд▓рд╛рдЗрдиреЛрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ ... рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрд░реВрд░рдд рд╕реЗ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рдорд╛рди рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЕрдзрд┐рдорд╛рдирддрдГ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд░реНрде рд╣реИрдВред
рдЬрдирд░реЗрдЯрд░
рдЬреЗрдирд░реЗрдЯрд░ рднреА рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдордХреНрдЦреА рдкрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:
>>> mygenerator = (x*x for x in range(3)) >>> for i in mygenerator : ... print(i) 0 1 4
рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдХреЛрд╖реНрдардХ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди: рдЖрдк рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдореИрдВ mygenerator рдореЗрдВ рдПрдХ рджреВрд╕рд░реА рдмрд╛рд░ рдирд┐рд░реНрдорд╛рдг, рдХреНрдпреЛрдВрдХрд┐ рдЬрдирд░реЗрдЯрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ 0 рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 1 рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЧрдгрдирд╛ 4 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХред
рдЙрдкрдЬ
рдпреАрд▓реНрдб рдПрдХ рдРрд╕рд╛ рдХреАрд╡рд░реНрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд░рд┐рдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
>>> def createGenerator() : ... mylist = range(3) ... for i in mylist : ... yield i*i ... >>> mygenerator = createGenerator()
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдмреЗрдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрдкрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ :-)
рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдХреЛрдб рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛:
рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╢реБрд░реБрдЖрдд рд╕реЗ рдЙрд╕ рдХреНрд╖рдг рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдпрд╣ рдЙрдкрдЬ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдПрдЧрд╛ - рдлрд┐рд░ рдпрд╣ рд▓реВрдк рд╕реЗ рдкрд╣рд▓рд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЪрдХреНрд░ рдХрд╛ рдПрдХ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛, рдЕрдЧрд▓рд╛ рдорд╛рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ - рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЬрдм рддрдХ рдорд╛рди рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗред
рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрдЬ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЦрд╛рд▓реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд▓реВрдк рдХреЗ рдЕрдВрдд рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдХреБрдЫ / рдЕрдиреНрдп рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдкреНрд░рд╢реНрди рд╕реЗ рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг
рдЬрдирд░реЗрдЯрд░:
рдХреЙрд▓ рдХрд░реЗрдВ:
рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХрдИ рдЫреЛрдЯреЗ рднрд╛рдЧ рд╣реИрдВ:
- рд▓реВрдк рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдлреИрд▓рддреА рд╣реИ :-) рдпрд╣ рд╕рднреА рд╕рдореВрд╣реАрдХреГрдд рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рдЦрддрд░рдирд╛рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, Candid.extend (node._get_child_candidates (рджреВрд░реА, min_dist, max_dist)) рд╕рднреА рдЬрдирд░реЗрдЯрд░ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдирдП рдЬрдирд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рднрд┐рдиреНрди рдорд╛рди рджреЗрдВрдЧреЗ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ)ред
- рд╡рд┐рд╕реНрддрд╛рд░ () рд╡рд┐рдзрд┐ рдПрдХ рд╕реВрдЪреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдЗрдирдкреБрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдЗрд╕рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред
рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЙрд╕реЗ рдПрдХ рд╕реВрдЪреА рджреЗрддреЗ рд╣реИрдВ:
>>> a = [1, 2] >>> b = [3, 4] >>> a.extend(b) >>> print(a) [1, 2, 3, 4]
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ, рдпрд╣ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:
- рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЛ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд╡рдВрд╢рдЬ рд╣реИрдВ рдФрд░ рдЖрдк рдЙрди рд╕рднреА рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рддрд░реНрдХ рдПрдХ рд╕реВрдЪреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдкрд╛рдпрдерди рдХреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрд╛рд░, рд╕реВрдЪрд┐рдпреЛрдВ, рдЯреБрдкрд▓реНрд╕ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛! рдЗрд╕реЗ рдбрдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣реА рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ ...
рдкрд╛рдардХ рдпрд╣рд╛рдВ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
рдЬрдирд░реЗрдЯрд░ рдердХрд╛рд╡рдЯ рдирд┐рдпрдВрддреНрд░рдг
>>> class Bank():
рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ред
рдЖрдкрдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреЛрд╕реНрдд Itertools
Itertools рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдЬрдирд░реЗрдЯрд░ рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рджреЛ рдЬрдирд░реЗрдЯрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ? рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореВрд▓реНрдп? рджреВрд╕рд░реА рд╕реВрдЪреА рдмрдирд╛рдП рдмрд┐рдирд╛ рдирдХреНрд╢рд╛ рдпрд╛ рдЬрд╝рд┐рдк рд▓рд╛рдЧреВ рдХрд░реЗрдВ?
рдмрд╕ рдЖрдпрд╛рдд itertools рдЬреЛрдбрд╝реЗрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдЗрдП рджреМрдбрд╝ (4 рдШреЛрдбрд╝реЛрдВ) рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдлрд┐рдирд┐рд╢ рдСрд░реНрдбрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
>>> horses = [1, 2, 3, 4] >>> races = itertools.permutations(horses) >>> print(races) <itertools.permutations object at 0xb754f1dc> >>> print(list(itertools.permutations(horses))) [(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2), (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1), (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1), (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)]
рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЛ рд╕рдордЭрдирд╛
рдПрдХ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ (__iter __ () рд╡рд┐рдзрд┐) рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ (__next __ () рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЗрд░рд┐рдЯреЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдРрд╕реА рдХреЛрдИ рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Iterators рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЦ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рдХрд┐
рд▓реВрдк рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред