Найти - Пользователи
Полная версия: Циклы, получение нескольких итераторов
Начало » Python для новичков » Циклы, получение нескольких итераторов
1
Nolr
Надо пройтись по массиву чисел следующим образом: на первом проходе берем разницу первого и второго элемента. На втором проходе второго и третьего, далее 3 и 4 и так далее.

numbers = [1, 2, 3, 4, 5, 6, 7, 8]

gist = [0] * 80

numbers = iter(numbers)
for element in numbers:
try:
next_element = numbers.next()
x = abs(element - next_element)
i = min(element, next_element) - 1
# работаем с x
except StopIteration:
pass
На втором проходе next() вызывается сначала в for element in numbers:, а потом в next_element = numbers.next(). То есть перескакиваем один элемент. Как обращаться к разным элементам numbers в цикле? Мне нужно что-то такое
numbers = [1, 2, 3, 4, 5, 6, 7, 8]

for element in numbers:
x = element + """ элемент, следующий за текущим""" + """ 4-ой элемент (i-тый элемент)""""
pasaranax
Если numbers идексируемый объект, то используй
for i, element in enumerate(numbers):
...
где i - у тебя будет номер итерации начиная с 0
Nolr
Спасибо.
doza_and
К получению нескольких итераторов по смыслу ближе zip
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
for n0,n1,n2 in zip(numbers[0::3],numbers[1::3],numbers[2::3]):
# делаем что надо
easlanov
numbers = [1,2,3,4,5,6,7,8]
for i,number in enumerate(numbers):
try:
next_number = numbers[i+1]
print abs(number - next_number)
except: pass
py.user.next
>>> def f(lst):
... return (lst[i] - lst[i + 1] for i in range(len(lst) - 1))
...
>>> print(*f(numbers))
-1 -1 -1 -1 -1 -1 -1
>>> g = f(numbers)
>>> next(g)
-1
>>> next(g)
-1
>>>
для второго питона
>>> def f(lst):
... return (lst[i] - lst[i + 1] for i in range(len(lst) - 1))
...
>>> for i in f(numbers):
... print i
...
-1
-1
-1
-1
-1
-1
-1
>>> i = iter(f(numbers))
>>> i.next()
-1
>>> i.next()
-1
>>>
а так возвращает итератор
>>> def f(lst):
... return iter(list(lst[i] - lst[i + 1] for i in range(len(lst) - 1)))
...
>>> i = f([1, 2, 3])
>>> type(i)
<type 'listiterator'>
>>>
это ещё одна для второго питона
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8]
>>> def f(lst):
... maxi = len(lst) - 2
... i = 0
... while i <= maxi:
... yield lst[i] - lst[i + 1]
... i += 1
...
>>> i = iter(list(f(numbers)))
>>> type(i)
<type 'listiterator'>
>>> i.next()
-1
>>> i.next()
-1
>>> i.next()
-1
>>>
doza_and
Ну если сдвижку делать тогда вообще просто все:
import numpy as np
numbers = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(numbers[:-1]-numbers[1:])
easlanov
В данному случае бессмыслено, просто для упражнения.
class Iterator:

def __init__(self, numbers):
self.numbers = numbers
self.iter_numbers = iter(numbers)
self.counter = 1

def __iter__(self):
return self

def next(self):
try:
result = abs(self.iter_numbers.next()-self.numbers[self.counter])
self.counter += 1
return result
except:
raise StopIteration

for i in Iterator([1,3,3,4,5,6,7,8,10]):
print i
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB