
рдХрднреА-рдХрднреА рд╡реЗрдм рдкрд░ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ "рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ" рдХреЛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╕реНрддреГрдд рдХреЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдФрд░ рдкреНрд░рд▓реЗрдЦрди) рд╡рд┐рд╡рд░рдг рдХрд╛рдлреА рдХрдард┐рди рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ Google рдЦреЛрдЬ рдореБрдЭ рдкрд░ рдореБрд╕реНрдХреБрд░рд╛рдИ, рдФрд░ рдореИрдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрдерди "рдкреИрдЯрд░реНрди" рдореЗрдВ рдЖрдпрд╛, рдЬреЛ рдХрд┐ рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд░реЗрдордВрдб рд╣реЗрдЯрд┐рдВрдЧрд░ рдереЗред
рдиреЛрдЯ : рд╕рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рджреА рдЧрдИ рд╣реИрдВ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, "рд╕рдмрд╕реЗ рдЦрд░рд╛рдм" рд╡рд┐рдХрд▓реНрдк рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг 2.7 рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд╕рдВрд╕реНрдХрд░рдг 3.3 рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ "рдкреИрдЯрд░реНрди" рдХреЗ рдиреЛрдЯреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрдЦреНрдпрд╛ рдХреА рдПрдХ рд╕рд░рдгреА
рдмреБрд░рд╛ : рдХрднреА-рдХрднреА рд╡реЗ рдРрд╕рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
for i in [0, 1, 2, 3, 4, 5]: print i**2
рдЕрдЪреНрдЫрд╛ : рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдПрдХ рдорд┐рд▓рд┐рдпрди рдирдВрдмрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА ~ 32 рдПрдордмреА рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧреАред
for i in range(6): print i**2
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛: рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдкред рджреВрд╕рд░реЗ рдХреЗ рд╡рд┐рдкрд░реАрдд,
xrange
рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рд╕рд░рдгреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
for i in xrange(6): print i**2
рдиреЛрдЯ : рдкрд╛рдпрдерди 3.3 рдореЗрдВ,
xrange
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╣реИ рдФрд░ рдмрд╕
range
рдХрд╣рд▓рд╛рддрд╛
range
ред
рд╕реВрдЪреА рдЪрдХреНрд░
рдЦрд░рд╛рдм : рдЕрдХреНрд╕рд░ рдкреВрд░реНрд╡ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print colors[i]
рдЕрдЪреНрдЫрд╛ : рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдкред
colors = ['red', 'green', 'blue', 'yellow'] for color in colors: print color
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕реВрдЪреА рдХреЗ рд╕рд╛рдордиреЗ рд╕реЗ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЦрд╝рд░рд╛рдм : рдлрд┐рд░ рд╕реЗ, C рд╕реЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рдЦреБрдж рдХреЛ рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)-1, -1, -1): print colors[i]
рдЕрдЪреНрдЫрд╛ : рд▓реЗрдХрд┐рди рдЕрдЬрдЧрд░ рдореЗрдВ рд╡реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
colors = ['red', 'green', 'blue', 'yellow'] for color in reversed(colors): print color
рд╕реВрдЪрдХрд╛рдВрдХ рд╕реВрдЪреА рдЪрдХреНрд░
рдКрдкрд░ рдЬреИрд╕рд╛
рдмреБрд░рд╛ ред
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print i, '-->', colors[i]
рдЕрдЪреНрдЫрд╛ : рдПрдХ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╡рд┐рдХрд▓реНрдк:
colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print i, '-->', color
рдбрдмрд▓ рд╕реВрдЪреА рдЪрдХреНрд░
рдКрдкрд░ рдЬреИрд╕рд╛
рдмреБрд░рд╛ ред
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] n = min(len(names), len(colors)) for i in range(n): print names[i], '-->', colors[i]
рдЕрдЪреНрдЫрд╛ : рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рд╣рдо рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐
zip
рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in zip(names, colors): print name, '-->', color
рдЙрддреНрдХреГрд╖реНрдЯ :
zip
рд╡рд┐рдкрд░реАрдд,
izip
рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорджрдж рдХрд░рддрд╛ рд╣реИред
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in izip(names, colors): print name, '-->', color
рдиреЛрдЯ : рдкрд╛рдпрдерди 3.3 рдореЗрдВ,
izip
рдХрд░реНрдиреЗрд▓ рдХреЛ
izip
рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╕
zip
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА
рдЦрд░рд╛рдм : рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
colors = ['red', 'green', 'blue', 'yellow'] def compare_length(c1, c2): if len(c1) < len(c2): return -1 if len(c1) > len(c2): return 1 return 0 print sorted(colors, cmp=compare_length)
рдЕрдЪреНрдЫрд╛ : рдХреБрдВрдЬреА рдЫрдБрдЯрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдмрд╣реБрдд рдХрдо рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
colors = ['red', 'green', 'blue', 'yellow'] print sorted(colors, key=len)
рдиреЛрдЯ :
cmp
рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рдпрдерди 3.x рдХрд░реНрдиреЗрд▓ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╢рдмреНрджрдХреЛрд╢ рдХреБрдВрдЬреА рдЪрдХреНрд░
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реВрдк рдХреЗ рд╕рд╛рде, рд╢рдмреНрджрдХреЛрд╢ рдХреА рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
for k in d: print k
рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд▓реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг:
R
рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛):
for k in d.keys(): if k.startswith('R'): del d[k]
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
d.keys()
рд╢рдмреНрджрдХреЛрд╢ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореБрдЦреНрдп рдЪрдХреНрд░ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рдореВрд▓реНрдп рдЪрдХреНрд░
рдЦрд░рд╛рдм : рдЪрд╛рдмрд┐рдпрд╛рдБ рджреНрд╡рд╛рд░рд╛ рд▓реВрдк рдФрд░ рдЕрдВрддрд┐рдо рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпред рдзреАрдорд╛ рддрд░реАрдХрд╛:
for k in d: print k, '-->', d[k]
рдЕрдЪреНрдЫрд╛ : рдпрд╣ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИ
for k, v in d.items(): print k, '-->', v
рдЙрддреНрдХреГрд╖реНрдЯ : рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
for k, v in d.iteritems(): print k, '-->', v
рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛
рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╡рд┐рдзрд┐, рд╢рдмреНрджрдХреЛрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЯрдкрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue'] d = dict(izip(names, colors))
рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЖрдЗрдЯрдо рдХреА рдЧрд┐рдирддреА
рдЦрд░рд╛рдм : рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛:
colors = ['red', 'green', 'red', 'blue', 'green', 'red'] d = {} for color in colors: if color not in d: d[color] = 0 d[color] += 1
рдЕрдЪреНрдЫрд╛ :
get()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
colors = ['red', 'green', 'red', 'blue', 'green', 'red'] d = {} for color in colors: d[color] = d.get(color, 0) + 1
рдорд╣рд╛рди : рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рддрд░реАрдХрд╛ рд╣реИ
defaultdict()
рдХрд╛ рдЙрдкрдпреЛрдЧ
defaultdict()
ред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред
d = defaultdict(int) for color in colors: d[color] += 1
рд╕рдореВрд╣реАрдХрд░рдг рд╕реВрдЪреА рдЖрдЗрдЯрдо
рдЦрд░рд╛рдм : рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдорд╛рдирджрдВрдб (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ) рджреНрд╡рд╛рд░рд╛ рдЖрдЗрдЯрдо рд╕реВрдЪреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЕрдХреНрд╕рд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
names = ['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie'] d = {} for name in names: key = len(name) if key not in d: d[key] = [] d[key].append(name) {5: ['roger', 'betty'], 6: ['rachel', 'judith'], 7: ['raymond', 'matthew', 'melissa', 'charlie']}
рдЕрдЪреНрдЫрд╛ : рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ:
d = defaultdict(list) for name in names: key = len(name) d[key].append(name)
рдкрд░рд┐рдгрд╛рдо
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпреЗ рддреБрдЪреНрдЫ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдЙрдирдХреЗ рд▓реЗрдЦрдХ рд░реЗрдордВрдб
рд╣реЗрдЯрд┐рдВрдЧрд░ (
@raymondh ), рдкрд╛рдпрдерди рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВред
UPD : PyCon 2013 рдХреА рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдП рдЧрдП рдереЗ:
http://youtu.be/OSGv2VnC0go (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ), рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЦ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд╕рд╛рде рд╣реА рд╕реНрдкреАрдХрд░ рдХрд╛ рд╣рд╛рд╕реНрдп рдФрд░ рдХрд░рд┐рд╢реНрдорд╛ рднреАред