# Инициализация списков S1 = [1,2,5,7] S2 = [1,2,5,7] S1 == S2 # True S1 is S2 # False length = len(S1) item = S1[1] del S1[0:2] * Списки поддерживают срезы точно так же, как строки * Со списками (и кортежами) широко используются смежные техники: - генераторы списков, - итераторы списков, - фильтры списков * При передаче списка в метод можно применять операцию распаковывания # Срезы списков # обнулить нечетные элементы S1[1::2] = [0] * len(S1[1::2]) * В данном случае звездочка - это операция повторения нулей # Генераторы списков # 0, 2, 4, 6, 8 S3 = range(0,10,2) for x in xrange(0,100000000): print x # Итераторы списков M = [[1,2,3], [4,5,6], [7,8,9]] # проход по тройкам for x,y,z in M: print x,y,z # добавить 1 к каждому элементу во втором столбце N = [row[1] + 1 for row in M] # отфильтровать нечетные значения N = [row[1] for row in M if row[1]%2 == 0] # составить все комбинации кодов 'AB' и 'CD' N = [x+y for x in "AB" for y in "CD"] # выбрать диагональ матрицы diag = [M[i][i] for i in [0,1,2]] # использование объекта-итератора I = iter(M) while True: try: print next(I) except StopIteration: break # использование объекта-енумератора for (key, value) in enumerate(M): print key, value * Итераторы в Python используются так широко, что часто заменяют циклы * К итераторам могут применяться фукнции all(), any(), len(), min(), max(), sum() # Фильтры списков Четыре специальных фильтра-преобразователя для списков: # отфильтровать по функции filter(boolfunction, sequence) # применить функцию map(function, sequence[,...]) # выбрать "парами" zip(sequence[,...]) # перебрать последовательно f(x)+x reduce(function, sequence[, initial]) # Примеры использования: # отбор положительных значений m = filter((lambda x: x>0), range(-5,5)) # попарный обход двух списков for (x,y) in zip(S1,S2): print x,y # суммирование элементов def sum(seq): def add(x,y): return x+y return reduce(add, seq, 0) print sum(xrange(1, 5)) # Распаковывание списка def v(a, b=1, *c): return a+b+c[0] def f(a,b,c): return a*b*c x=[1,2,3] f(*x)
Python Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor