2013-10-08 2 views
1

NON-HomeWorkИтерация и сравнить в лямбда в Python

У меня есть список поплавков x, и я хочу, чтобы включить его в список y, список всех десятые элементов в x.

По моим собственным причинам я действительно хочу сделать это в крошечном количестве строк. Я придумал что-то вроде этого:

i = 0 
y = filter(lambda x: (++i)%10; x) 

Теоретически это должно работать, i уже определен, а ++i обычно добавляют один переменной i, а затем идти о выражении.

К сожалению, ++ не существует в Python.

Любые Pythonic способы обойти это?

Еще одна идея, которую я имел, заключалась в использовании карты, и выражение выражает push элементы в списке y.

Сообщите мне, если я могу быть более ясным.

ответ

15

Использование Extended slices:

>>> x = range(1,101) 
>>> y = x[9::10] # 9 -> start from 10th, 10: step 
>>> y 
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 
+0

Красивая. Раньше не видел этого, так как, хотя я использовал Python некоторое время, я не полностью изучил много более путинских способов делать вещи. Благодаря! –

3

насчет [value for index, value in enumerate(list_of_floats) if index % 10 == 0]?

+1

Стоит отметить, что нарезка лучше в этом случае. Однако этот метод стоит знать в тех случаях, когда критерий фильтрации более сложный. – senderle

0

Альтернатива, которые используют itertools.count:

>>> x = range(1, 101) 
>>> i = itertools.count(1) 
>>> y = filter(lambda item: next(i) % 10 == 0, x) 
>>> y 
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 
Смежные вопросы