рдЙрдкрдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ

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() #   >>> print(mygenerator) # mygenerator  ! <generator object createGenerator at 0xb7555c34> >>> for i in mygenerator: ... print(i) 0 1 4 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдмреЗрдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрдкрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ :-)

рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдХреЛрдб рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдм рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛:

рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╢реБрд░реБрдЖрдд рд╕реЗ рдЙрд╕ рдХреНрд╖рдг рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдпрд╣ рдЙрдкрдЬ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдПрдЧрд╛ - рдлрд┐рд░ рдпрд╣ рд▓реВрдк рд╕реЗ рдкрд╣рд▓рд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЪрдХреНрд░ рдХрд╛ рдПрдХ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛, рдЕрдЧрд▓рд╛ рдорд╛рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ - рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЬрдм рддрдХ рдорд╛рди рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗред

рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрдЬ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЦрд╛рд▓реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд▓реВрдк рдХреЗ рдЕрдВрдд рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдХреБрдЫ / рдЕрдиреНрдп рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрд░реЛрдд рдкреНрд░рд╢реНрди рд╕реЗ рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг


рдЬрдирд░реЗрдЯрд░:
 #   ,     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 

рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХрдИ рдЫреЛрдЯреЗ рднрд╛рдЧ рд╣реИрдВ:

рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЙрд╕реЗ рдПрдХ рд╕реВрдЪреА рджреЗрддреЗ рд╣реИрдВ:
 >>> a = [1, 2] >>> b = [3, 4] >>> a.extend(b) >>> print(a) [1, 2, 3, 4] 

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ, рдпрд╣ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:

рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рддрд░реНрдХ рдПрдХ рд╕реВрдЪреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдкрд╛рдпрдерди рдХреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрд╛рд░, рд╕реВрдЪрд┐рдпреЛрдВ, рдЯреБрдкрд▓реНрд╕ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛! рдЗрд╕реЗ рдбрдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣реА рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ ...

рдкрд╛рдардХ рдпрд╣рд╛рдВ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдЬрдирд░реЗрдЯрд░ рдердХрд╛рд╡рдЯ рдирд┐рдпрдВрддреНрд░рдг


 >>> class Bank(): #  ,    (ATM тАФ Automatic Teller Machine) ... crisis = False ... def create_atm(self) : ... while not self.crisis : ... yield "$100" >>> hsbc = Bank() #   ,         >>> corner_street_atm = hsbc.create_atm() >>> print(corner_street_atm.next()) $100 >>> print(corner_street_atm.next()) $100 >>> print([corner_street_atm.next() for cash in range(5)]) ['$100', '$100', '$100', '$100', '$100'] >>> hsbc.crisis = True #  ,   ! >>> print(corner_street_atm.next()) <type 'exceptions.StopIteration'> >>> wall_street_atm = hsbc.create_atm() #       >>> print(wall_street_atm.next()) <type 'exceptions.StopIteration'> >>> hsbc.crisis = False #   ,    ,  - ... >>> print(corner_street_atm.next()) <type 'exceptions.StopIteration'> >>> brand_new_atm = hsbc.create_atm() #     ,    ! >>> for cash in brand_new_atm : ... print cash $100 $100 $100 $100 $100 $100 $100 $100 $100 ... 

рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ред

рдЖрдкрдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреЛрд╕реНрдд 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 рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЦ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рдХрд┐ рд▓реВрдк рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/In132554/


All Articles