首页 > 解决方案 > 如何忽略第一个屈服值?

问题描述

以下代码仅用于说明目的。

def get_messages_from_redis():
    for item in self.pubsub.listen():
        yield (item['channel'], item['data'])  # how to ignore the first yield?

我知道以下方式可以忽略第一个屈服值:

g = get_messages_from_redis()
next(g)

但是如何忽略这个get_messages_from_redis()呢?(counter可以用来控制是否让步,但是有没有更好的方法呢?)

标签: pythonredis

解决方案


在屈服之前迭代你的函数。我不确定您的可迭代对象到底是什么,但这是一个假设list.

def get_messages_from_redis():
    for item in self.pubsub.listen()[1:]:
        yield item['channel'], item['data']

对于更通用的解决方案,您可以创建可迭代的迭代器,迭代第一个,然后循环并从那里产生。注意:这主要是为了更广泛的覆盖范围,我不确定这可能会对某些迭代产生什么负面影响。

def iter_skip_first(i):
    iterable = iter(i)
    next(iterable)

    for i in iterable:
        yield i

li = [1, 2, 3, 4]
d = {"one": 1, "two": 2, "three": 3, "four": 4}

print(*iter_skip_first(li))
print(*iter_skip_first(d))

推荐阅读