Python 是否有返回序列当前项的方法?
我有一个类对象列表,我正在使用Python 是否有返回序列当前项的方法?,python,iterator,cycle,itertools,Python,Iterator,Cycle,Itertools,我有一个类对象列表,我正在使用itertools.cycle()不断循环它 class Letter: def __init__(self,name): self.name = name self.att = 0 self.att1 = 0 现在我创建类对象列表 letterList = [Letter('a'),Letter('b'),Letter('c'),Letter('d')] 然后我用itertools.cycle()创建一个序列,
itertools.cycle()
不断循环它
class Letter:
def __init__(self,name):
self.name = name
self.att = 0
self.att1 = 0
现在我创建类对象列表
letterList = [Letter('a'),Letter('b'),Letter('c'),Letter('d')]
然后我用itertools.cycle()
创建一个序列,如下所示:
seqList = itertools.cycle(letterList)
每当我想转到序列中的下一项并为其中一项属性指定值时:
next(seqList).att = 1
但是如果我想给另一个属性赋值呢?是否有其他迭代器方法允许我调用序列中的当前项,如:
thisItem(seqList).att1 = 7
可以将next()赋值给变量并访问该变量
this_one = next(seqList)
this_one.attr = value
如果您只是计划无限循环相同的项目,则可以使用for循环(不过,中断步骤对于最终退出非常有用!):
在大多数实际情况下,您只需使用一个变量,但只是为了好玩,让我们创建一个包装器来“记住”给定iterable的最后一项(或最后N项):
from collections import deque
class recorded:
def __init__(self, it, size=1):
self.it = it
self.buf = deque(maxlen=size)
def __iter__(self):
return self
def next(self):
self.buf.append(next(self.it))
return self.buf[-1]
def last(self, n=0):
return self.buf[-1-n]
现在你可以写:
it = recorded(itertools.cycle(letterList))
it.next()
it.last().something = 11
it.last().somethingElse = 111
甚至:
it = recorded(itertools.cycle(letterList), 2)
it.next()
it.last().something = 11
it.next()
it.last(1).something = penultimate
我找到的解决办法是:
next(seqList).att = 1
next(seqList)
next(seqList)
next(seqList)
next(seqList).att1 = 7
它既不美观也不优雅,对于较大的场景来说效果也不太好,但它适用于这种情况,而且非常简单。这看起来有点滑稽。您可以提供更多的上下文吗?您可以只保存值:
item=next(seqList);第1项=1;第2项=2例如,只需保存一个引用。next(seqList)。\uuu dict\uuuu.update({'attr1':'value1','attr2':'value2'})
我认为这不会起作用,因为它会创建另一个实例,并且它在方法的范围内。我需要在整个周期中使用相同的实例。
next(seqList).att = 1
next(seqList)
next(seqList)
next(seqList)
next(seqList).att1 = 7