遍历一个可迭代对象,如何使用next()获取前一个值和下一个值?
Iterate through an iterable, how to obtain previous and next value using next()?
def f(iterable):
i = iter(iterable)
int_list = []
n2 = next(i)
while True:
n1, n2, n3 = n2, next(i), next(i)
print('n1', n1)
print('n2,', n2)
print('n3', n3)
if n2 > n1 and n2> n3:
int_list.append(n2)
return int_list
在这种情况下,可迭代对象是一个列表。我想检查整数是否大于前一个整数和下一个整数。但是我不知道如何分配正确的值以使用 next() 方法进行检查
听起来你可以用类似的东西来做到这一点:
n1, n2, n3 = next(i), next(i), next(i)
while True:
# ... do your checks
n1, n2, n3 = n2, n3, next(i)
您必须添加合适的终止条件检查。
您可以创建以下生成器:
def f(iterable):
i = iter(iterable)
n1, n2, n3 = next(i), next(i), next(i)
while True:
if n2 > max(n1, n3):
yield n2
n1, n2, n3 = n2, n3, next(i)
然后像这样测试:
>>> list(f([1, 4, 3, 8, 6]))
[4, 8]
collections.deque
是这种窗口迭代器的理想选择。
from collections import deque
def f(iterable):
int_list = []
it = iter(iterable)
n = deque([next(it), next(it)], maxlen=3)
for item in it:
n.append(item)
if n[0] < n[1] > n[2]:
int_list.append(items[1])
我知道您专门询问迭代器,但您可能也对使用列表理解的解决方案感兴趣:
def f(l):
return [a < b > c for a,b,c in zip(l,l[1:],l[2:])]
例如,对于 f([1,3,2,5,4])
,此 returns [True, False, True]
(根据问题省略第一个和最后一个元素)。
先把它变成 list
,这样你就不会被困在单行道上了:
>>> a = [3,5,7,4,6,5,8]
>>> def f(iterable):
... thelist = list(iterable)
... return [item for num,item in enumerate(thelist[1:-1]) if max(thelist[num], thelist[num+1], thelist[num+2]) == item]
...
>>> f(a)
[7, 6]
def f(iterable):
i = iter(iterable)
int_list = []
n2 = next(i)
while True:
n1, n2, n3 = n2, next(i), next(i)
print('n1', n1)
print('n2,', n2)
print('n3', n3)
if n2 > n1 and n2> n3:
int_list.append(n2)
return int_list
在这种情况下,可迭代对象是一个列表。我想检查整数是否大于前一个整数和下一个整数。但是我不知道如何分配正确的值以使用 next() 方法进行检查
听起来你可以用类似的东西来做到这一点:
n1, n2, n3 = next(i), next(i), next(i)
while True:
# ... do your checks
n1, n2, n3 = n2, n3, next(i)
您必须添加合适的终止条件检查。
您可以创建以下生成器:
def f(iterable):
i = iter(iterable)
n1, n2, n3 = next(i), next(i), next(i)
while True:
if n2 > max(n1, n3):
yield n2
n1, n2, n3 = n2, n3, next(i)
然后像这样测试:
>>> list(f([1, 4, 3, 8, 6]))
[4, 8]
collections.deque
是这种窗口迭代器的理想选择。
from collections import deque
def f(iterable):
int_list = []
it = iter(iterable)
n = deque([next(it), next(it)], maxlen=3)
for item in it:
n.append(item)
if n[0] < n[1] > n[2]:
int_list.append(items[1])
我知道您专门询问迭代器,但您可能也对使用列表理解的解决方案感兴趣:
def f(l):
return [a < b > c for a,b,c in zip(l,l[1:],l[2:])]
例如,对于 f([1,3,2,5,4])
,此 returns [True, False, True]
(根据问题省略第一个和最后一个元素)。
先把它变成 list
,这样你就不会被困在单行道上了:
>>> a = [3,5,7,4,6,5,8]
>>> def f(iterable):
... thelist = list(iterable)
... return [item for num,item in enumerate(thelist[1:-1]) if max(thelist[num], thelist[num+1], thelist[num+2]) == item]
...
>>> f(a)
[7, 6]