Форум сайта python.su
0
Хочу написать функцию, выдающую индекс первого непустого элемента в списке или подсписке:
def nonzero(l,beg=0,end=len(l)): for i in range(beg,end): if l[i]: return i
Отредактировано VlhOwn (Июль 25, 2015 17:19:38)
Офлайн
33
VlhOwn
beg=0,end=len(l)
Отредактировано Budulianin (Июль 25, 2015 17:25:27)
Офлайн
0
Извините, не понял, при чем тут итераторы.
Я хочу простой вещи:
вызывать nonzero(l), когда хочу найти индекс первого непустого элемента во всем списке l
вызывать nonzero(l,beg=5,end=10), когда ищу в
l[5:10]
nonzero(l[5:10])
Отредактировано VlhOwn (Июль 25, 2015 17:38:16)
Офлайн
253
VlhOwnЭто надо вам читать про функции. Если коротко end=len(l) выполняется во время компиляции тела функции, а не при ее вызове. Так что смело первой строчкой ставьте if.
что l не определено в выражении end=len(l).
Офлайн
33
VlhOwn
но вот блажь такая …. долго объяснять.
def func(lst, start=0, end=None): if end is None: end = len(lst) for i in xrange(start, end): if lst[i]: return i return -1
VlhOwnЭто обычное дело для функций в Python, когда дефолтные значения
но как-то это некрасиво.
Отредактировано Budulianin (Июль 25, 2015 19:36:09)
Офлайн