Home

Tags

Python, базовые функции для списков, итераторов

2010-02-09 python sorted reversed

В данной статье описал основные ф-ии, из стандартного набора python 2.6, для управления списками, итераторами, словарями и пр.

max, min

Получить максимальное, минимальное значение
print max( [1,2,3] )
# 3
print min( [1,2,3] )
# 1
можно задать ключ, пример как получить самую длинную строку
print max( [ 'vi','linux','win' ], key=lambda x:len(x) )
# linux

sum

Сумма списка
print sum( [1,2,3] )
# 6

print sum([ [1,2], [3,4], [5,6] ], [])
# [1, 2, 3, 4, 5, 6] 

all, any

Логическая ф-ия, all возвращает True если все элементы списка равны True
any возвращает True если есть хоть один элемент списка равный True
print all( [True,False,True] )
# False
print any( [True,False,True] )
# True

zip

Слияние 2-х списков
c = ['a','b','c']
d = [1,2,3]
print zip(c,d)
# [('a', 1), ('b', 2), ('c', 3)] 

dict

Получить словарь из списка
d = [('a', 1), ('b', 2), ('c', 3)]
print dict(d)
# {'a': 1, 'c': 3, 'b': 2} 

map

Обработать все элементы списка
d = [1,2,3]
print map(lambda x:x*2,d)
# [2, 4, 6] 

С несколькими параметрами:
print map(lambda a,b,c:a+b+c, [1,2,3,4], [2,3,4,5], [3,4,5,6])
# [6, 9, 12, 15] 

Без указания обработчика, списки склеиваются
print map(None, [1,2,3,4], [2,3,4,5], [3,4,5,6,10])
# [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (None, None, 10)] 

range

Получить список чисел, range(старт, стоп, шаг)
d = range(1,10,2)
print d
# [1, 3, 5, 7, 9] 
xrange - аналогичная ф-ия, но возвращает итератор вместо списка

reduce

Вычислить значение: reduce( lambda x, y: x+y, [ 1,2,3,4 ] ) = (((1+2)+3)+4)
d = [1, 2, 3]
print reduce(lambda x, y: x+y, d)
# 6

enumerate

Пронумеровать список
print list( enumerate( ['a','b','c'] ) )
# [(0, 'a'), (1, 'b'), (2, 'c')] 
возвращает итератор

filter

Фильтровать список
print filter(lambda x:x%2, [1,2,3,4,5,6] )
# [1, 3, 5] 

iter

Получить итератор: iter( fun(), stop )
a = 7
def f():
    global a
    a -= 1
    return a
print list( iter(f,2) )
# [6, 5, 4, 3] 

list

list( xrange(5) )
# [0, 1, 2, 3, 4] 

tuple

tuple( xrange(5) )
# (0, 1, 2, 3, 4) 

next

Получить следующее значение из итератора
print iter('abcdef').next()
# a

reversed

Реверс
print list( reversed('abcde') )
# ['e', 'd', 'c', 'b', 'a'] 

set

множества
print set('abcdedc')
# set(['a', 'c', 'b', 'e', 'd'])

sorted

Сортировка, можно задать ключ, ф-ию сравнения, реверс.
sorted( list [ ,cmp] [ ,key] [ ,reverse] )
print sorted('bca')
# ['a', 'b', 'c']
print sorted('bca',reverse=True)
# ['c', 'b', 'a']
print sorted( [ 'win','linux','vi' ], key=lambda x:len(x) )
# ['vi', 'win', 'linux']
print sorted( [ ['a',3], ['b',1], ['c',2] ], cmp=lambda a,b:cmp(a[1],b[1]) )
# [ ['b', 1], ['c', 2], ['a', 3] ] 

slice

Срез листа
range(10)[slice(0,7,2)]
# [0, 2, 4, 6]
'abcdefghqwrtyuiop'[slice(0,10,2)]
# 'acegq'

tee

Клонирование итератора tee( iterator [ ,n] ), n - кол-во копий
a,b,c = tee( xrange(5), 3)
print list(a), list(b), list(c)
# [0, 1, 2, 3, 4] [0, 1, 2, 3, 4] [0, 1, 2, 3, 4] 

chain

Слить итераторы chain( *iters )
chain('ABC', 'DEF')
# A B C D E F

combinations

Получить комбинации от значений итератора
combinations('ABCD', 2)
# AB AC AD BC BD CD
combinations(range(4), 3)
# 012 013 023 123