Показаны сообщения с ярлыком рецепты. Показать все сообщения
Показаны сообщения с ярлыком рецепты. Показать все сообщения

пятница, 17 апреля 2009 г.

Поиск значения в списке

Итак в продолжение темы рецептов - ищем элемент в списке, как это не странно Python 2.5 этого делать нормально не умеет.
Раньше я делал это примерно так

a = None
for x in list:
if pred(x):
a = x

Очевидно что это не удобно. Как это обойти я подсмотрел здесь (там описано гораздо больше вариантов, но все они плохо работают с случаем когда ничего не найдено)

Итак делаем функцию find (которая должна бы быть в стандартной библиотеке языка)

def find(f, seq):
"""Return first item in sequence where f(item) == True."""
for item in seq:
if f(item):
return item

Дальше поиск прост

a = find(lambda x: x.id == 5, values) #will find value with id == 5 or None if nothing found

Стоит отметить что в 2.6 версии эта проблема решена и все гораздо проще (спасибо @ mishok13 за пример)

next((x for x in seq if pred(x)), None)
или для нашего примера
next((x for x in values if x.id == 5), None)

Какие есть еще более изящные варианты?

четверг, 16 апреля 2009 г.

Сумма двух масивов в Python

Потребовалось сложить элементы двух массивов в Python, вот наиболее простой способ который я придумал
[x + y for x, y in zip(arr1, arr2)]

Какие есть еще более изящные варианты?