因此,我正在尝试制作一个程序,以删除给定字符串中所有重复的字母。该代码基本上是一个自制的迭代器,我从另一篇文章中获得:How do I reset a list iterator in Python?
string = "NNEEXXxxTTGGEENNCCOODDEERR"
class rmvDuplicates:
def __init__(self, list, newString):
self.newString = newString
self.list = list
self.idx = 0
self.content = list[self.idx]
def __iter__(self):
return self
def get_content(self, content):
return content
def get_index(self):
return self.idx
def get_content_next(self, content):
try:
self.idx += 1
return self.content
finally:
self.idx -= 1
def remove(self, elem):
del self.list[self.idx]
return
def rewind(self):
self.idx = 0
def __next__(self):
try:
return self.list[self.idx]
except IndexError:
pass
finally:
self.idx += 1
self.content = self.list[self.idx]
new_String = []
li = rmvDuplicates(list(string), new_String)
for elem in li:
if li.get_content(elem) == li.get_content_next(elem):
print(li.get_content(elem))
li.remove(elem)
print(li.list)
print("Hello")
注意:print("Hello")
仅用于测试目的
我对其进行了一些修改以满足我的需要,并且效果很好,直到达到IndexError
为止。
def __next__(self):
try:
return self.list[self.idx]
except IndexError:
pass
finally:
self.idx += 1
self.content = self.list[self.idx]
我已经尝试使用带有pass方法的Except-Block来解决这个问题。
但是,程序仍然显示此消息:
Traceback (most recent call last):
File "rmv_dplc_cls.py", line 49, in <module>
for elem in li:
File "rmv_dplc_cls.py", line 42, in __next__
self.content = self.list[self.idx]
IndexError: list index out of range
这里有没有人知道如何解决此问题,因此程序可以继续运行并且不会中止。
谢谢
答案 0 :(得分:1)
感谢@jfaccioni。您的建议非常有帮助。这对我来说并不太好,所以我做了如下修改:
def __next__(self):
try:
value = self.list[self.idx]
self.idx += 1
self.content = self.list[self.idx]
except IndexError:
value = self.list[self.idx]
finally:
if self.idx == len(self.list):
raise StopIteration
return value
我需要self.content
才能正常工作。
感谢您的帮助。
答案 1 :(得分:0)
尝试将您的__next__
方法更改为:
def __next__(self):
try:
value = self.list[self.idx]
self.idx += 1
except IndexError:
self.idx = 0
value = self.list[self.idx]
finally:
return value
说明:
如果try子句失败,则意味着self.list[self.idx]
访问列表范围之外的元素,从而引起IndexError
升高。在这种情况下,尝试访问相同的self.list[self.idx]
将导致这次在try子句之外的另一个IndexError
。