Google Analytics

воскресенье, 29 августа 2010 г.

Приёмы программирования на Python: обработка списков.

Эффективность программиста сильно зависит от того, насколько хорошо он знает язык программирования и владеет им.Важно привить себе правильные приёмы программирования. И встретив ПРАВИЛЬНЫЙ приём, тут же брать его на вооружение.В этой заметке мы рассмотрим использование некоторых приёмов обработки списков.
Допустим, у нас есть список:
my_list = ["Andrew","Joan","Jack","Betty"]
Для того, что-бы перебрать его, поэлементно мы используем цикл for:
for name in my_list:
 print name

Получение одновременно индекса и значение элемента из списка.

А теперь представьте, что вам нужно каждый раз получать индекс элемента и значение. В эпоху моего раннего чайничества (боюсь и теперь я многого не знаю) - я использовал такие варианты как получение индекса как метод списка
index()
и конструкцию:
for index in xrange(0,len(my_list) ):
 print "{0} on position {1}".format(my_list[index],index)
Если этот метод кривой до ужаса, то вариант с
index()
ещё и создаёт трудноуловимую ошибку. Если в списке есть пару одинаковых элементов - вы получите каждый раз при попадании на повторяющийся элемент индекс ближайшего такого элемента:
for name in my_list:
 print "{0} on position {1}".format(name,my_list.index(name))
А ведь так просто сделать правильно:
for index, name in enumerate(my_list):
 print "{0} on position {1}".format(name,index)

Перебор в цикле for двух списков:

Если у вас есть два списка, значения из которых надо последовательно считать в цикле одновременно, используйте функцию zip().Код примера:
fruits = ['Grape', 'Apple', 'Lime']
colors = ['violet', 'red', 'green']

for fruit, color in zip(fruits, colors):
 print "The color of {0} is {1}".format(fruit,color)
Что же возвращает функция zip? Смотрим на её результат:
[('Grape', 'Violet'), ('Apple', 'Red'), ('Lime', 'Green')]
Сюрприз!На выходе мы видим список из последовательностей вида (fruit,color).

Сортировка списка

Функция sorted() - возвращает отсортированный список.Часто используется в виде:
print sorted(set(fruits))
Функция set() возвращает последовательность.Если при вызове ей передать последовательность, она возьмёт из неё все записи, по сути вернув копию списка или иной последовательности.
Функция reversed() выстраивает записи в обратном порядке.Пример:
print list(reversed(fruits))
Помни!Только правильные приёмы программирования сделают твой труд продуктивным, а процесс написания программ приятным. И не будет отчаянного желания спрятать исходники от глаз более продвинутых программистов.Ведь хороший программист — это тот программист, исходники которого приятно читать и несложно править. Не стесняйтесь пользоваться поиском и задавать вопросы. И я надеюсь что вам повезёт не повторять ошибок многих чайников, изобретавших велосипед из=за плохого знания своего программерского инструментария.

Комментариев нет: