неділя, 24 березня 2013 р.

Приклади з лекції «Transforming code into Beautiful, Idiomatic Python by Raymond Hettinger»

Цикли в діапазоні чисел

for i in [0,1,2,3,4,5]:
    print i**2
    
for i in range(6):
    print i**2
    
for i in xrange(6):
    print i**2

Цикл по колекції

colors = ['red','green','blue','yellow']

for i in range(len(colors)):
    print colors[i]

for color in colors:
    print color 

Зворотній цикл

colors=['red','green','blue','yellow']

for i in range(len(colors)-1,-1,-1):
    print colors[i]

for color in reversed(colors):
    print color

Цикл за індексами

colors=['red','green','blue','yellow']

for i in range(len(colors)):
    print i, '-->', colors[i]
    
for i, color in enumerate(colors):
    print i, '-->', colors[i]

Цикл двох колекцій

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]

for name, color in zip(names, colors):
    print name, '-->', color

for name, color in izip(names, colors):
    print name, '-->', color

Цикл в певному порядку

colors=['red','green','blue','yellow']

for color in sorted(colors):
    print color

for color in sorted(colors, reverse=True):
    print color

Користувальницький порядок сортування

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)
print sorted(colors, key=len)

Цикл за ключем словника

d = {'matthew':'blue','rachel':'green','raymond':'red'}

for k in d:
    print k

for k in d.keys():
    if k.startswith('r'):
        del d[k]

d = {k : d[k] for k in d if not k.startswith('r')}

Цикл за ключем і значенням словника

d = {'matthew':'blue','rachel':'green','raymond':'red'}

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))
{'matthew':'blue','rachel':'green','raymond':'red'}

d = dict(enumerate(names))
{0:'raymond', 1:'rachel', 2:'matthew'}

Підрахунок в словнику

colors=['red','green','red','blue','green','red']

d = {}
for color in colors:
    if color not in d:
        d[color] = 0
    d[color] += 1

{'blue': 1,'green': 2,'red': 3}

d = {}
for color in colors:
    d[color] = d.get(color, 0) + 1

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']} 

Групування словників - ІІ

names=['raymond','rachel','matthew','roger',
       'betty','melissa','judith','charlie']

d = {}
for name in names:
    key = len (name)
    d.setdefault(key, []).append(name)

d = defaultdict(list)
for name in names:
    key = len(name)
    d[key].append(name)

Is a dictionary popitem() atomic?

d = {'matthew':'blue','rachel':'green','raymond':'red'}

while d:
    key, value = d.popitem()
    print key, '-->', value

Розпакування послідовності

p = 'Raymond','Hettinger', 0x30,'python@example.com'

fname = p[0]
lname = p[1]
age = p[2]
email = p[3]

fname, lname, age, email = p

Оновлення декількох змінних

def fibonacci(n):
    x = 0
    y = 1
    for i in range(n):
        print x
        t = y
        y = x+y
        x = t

def fibonacci(n):
    x, y = 0, 1
    for i in range(n):
        print x
        x, y = y, x+y

Зчеплення(конкатенація) рядків

names = ['raymond','rachel','matthew','roger',
         'betty','melissa','judith','charlie']

s = names[0]
for name in names[1:]:
    s += ', ' + name
print s

print ', ' .join(names)

Як відкривати і закривати файли

f = open('data.txt')
try:
    data = f.read()
finally:
    f.close()

with open('data.txt') as f:
    data = f.read()

Списки і генератор виразу

result = []
for i in range(10):
    s = i**2
    result.append(s)
print sum(result)

print sum([i**2 for i in xrange(10)])

print sum(i**2 for i in xrange(10))



Немає коментарів:

Дописати коментар