python 中迭代器的最后编号
Last number of iterator in python
请问如何编辑同时给出序列中最后一个数字的迭代器?我的意思是一般来说,不是为了这么简单的序列。使用 < 而不是 == 不是一个选项。
class P():
def __init__(self, n0):
self.n = n0
def __iter__(self):
return self
def __next__(self):
if self.n == 1:
raise StopIteration
num = self.n
self.n = self.n // 2 if self.n % 2 == 0 else 3 * self.n + 1
return num
nmax = 1000
PP = P(nmax)
PPP = []
for j in PP:
PPP.append(j)
print(PPP)
当前输出:
[10, 5, 16, 8, 4, 2]
期望的输出:
[10, 5, 16, 8, 4, 2, 1]
在您的 class 中使用局部变量来确定您获得下一个的次数:
class P():
i = 0
def __init__(self, n0):
self.i=n0-1
self.n = n0
def __iter__(self):
return self
def __next__(self):
self.i=self.i-1
if self.i == 1:
raise StopIteration
num = self.n
self.n = self.n // 2 if self.n % 2 == 0 else 3 * self.n + 1
return num
nmax = 10
PP = P(nmax)
PPP = []
for j in PP:
PPP.append(j)
print(PPP)
注意:通常写 if self.i <= 1:
然后 if self.i == 1:
更安全。在将来的某些更改中,您可能会更改 i
的值,并开始将其递减 2,然后 ==
变体将失败。
编辑:当你想在前一个值等于1
时停止,你可以这样做:
class P():
previous_value = 0
def __init__(self, n0):
self.i=n0-1
self.n = n0
def __iter__(self):
return self
def __next__(self):
if self.previous_value == 1:
raise StopIteration
num = self.n
self.n = self.n // 2 if self.n % 2 == 0 else 3 * self.n + 1
self.previous_value = num
return num
nmax = 20
PP = P(nmax)
PPP = []
for j in PP:
PPP.append(j)
print(PPP)
请问如何编辑同时给出序列中最后一个数字的迭代器?我的意思是一般来说,不是为了这么简单的序列。使用 < 而不是 == 不是一个选项。
class P():
def __init__(self, n0):
self.n = n0
def __iter__(self):
return self
def __next__(self):
if self.n == 1:
raise StopIteration
num = self.n
self.n = self.n // 2 if self.n % 2 == 0 else 3 * self.n + 1
return num
nmax = 1000
PP = P(nmax)
PPP = []
for j in PP:
PPP.append(j)
print(PPP)
当前输出:
[10, 5, 16, 8, 4, 2]
期望的输出:
[10, 5, 16, 8, 4, 2, 1]
在您的 class 中使用局部变量来确定您获得下一个的次数:
class P():
i = 0
def __init__(self, n0):
self.i=n0-1
self.n = n0
def __iter__(self):
return self
def __next__(self):
self.i=self.i-1
if self.i == 1:
raise StopIteration
num = self.n
self.n = self.n // 2 if self.n % 2 == 0 else 3 * self.n + 1
return num
nmax = 10
PP = P(nmax)
PPP = []
for j in PP:
PPP.append(j)
print(PPP)
注意:通常写 if self.i <= 1:
然后 if self.i == 1:
更安全。在将来的某些更改中,您可能会更改 i
的值,并开始将其递减 2,然后 ==
变体将失败。
编辑:当你想在前一个值等于1
时停止,你可以这样做:
class P():
previous_value = 0
def __init__(self, n0):
self.i=n0-1
self.n = n0
def __iter__(self):
return self
def __next__(self):
if self.previous_value == 1:
raise StopIteration
num = self.n
self.n = self.n // 2 if self.n % 2 == 0 else 3 * self.n + 1
self.previous_value = num
return num
nmax = 20
PP = P(nmax)
PPP = []
for j in PP:
PPP.append(j)
print(PPP)