len(a) == len および for every の場合、「a」は「l」のメンバーになることができます"a" の member(lets call p)、p[0] <= max および p[1] <= max
たとえば、poslist_all(max=2,len=1)
[[(1,1)],[(1,2)],[(2,1)],[(2,2)]]
および poslist_all(2,2)
[[(1,1),(1,1)],[(1,1),(1,2)],[(1,1),(2,1)],[(1,1),(2,2)],...,[(2,2),(1,1)],[(2,2),(1,2)],[(2,2),(2,1)],[(2,2),(2,2)]]
だから私はそのリストをイテレータにしようとしていて、このコードを思いついた、
class poslist_all:
def __init__(self,max,len):
self.max = max
self.len = len
self.iposlist = len*[(1,1)]
def __iter__(self):
return self
def __next__(self):
ml = self.maxlist()
if ml:
if ml[0] == 0:
raise StopIteration
else:
toinc = ml[0]-1
self.inc(ml[0] - 1)
for i in range(ml[0],self.len-1):
self.iposlist[i] = (1,1)
return self.iposlist
else:
self.inc(self.len - 1)
return self.iposlist
def maxlist(self):
return [x for x,y in enumerate(self.iposlist) if y == (self.max,self.max)]
def inc(pnum):
if self.iposlist[pnum][1] == self.max:
return (self.iposlist[pnum][0]+1,1)
else:
return (self.iposlist[pnum][0],self.iposlist[pnum][1]+1)
if __name__ == "__main__":
for ps in poslist_all(2,2):
print(ps)
しかし、これは常に返されます
Traceback (most recent call last):
File "./helper.py", line 33, in <module>
for ps in poslist_all(2,2):
File "./helper.py", line 22, in __next__
self.inc(self.len - 1)
TypeError: inc() takes 1 positional argument but 2 were given
このエラーの原因は何ですか? それを解決する方法? これを行うためのよりpythonicな方法はありますか?