按如下所示获取列表Usernames
。
Usernames = ["johnsmith"]
我有变量NewUsername
,我需要检查其值是否已包含在列表中。如果不是,则将整数连接到其末尾。
示例:
NewUsername = "alexsmith"
Usernames = ["johnsmith", "alexsmith"]
NewUsername = "johnsmith"
Usernames = ["johnsmith", "alexsmith", "johnsmith1"]
NewUsername = "johnsmith"
Usernames = ["johnsmith", "alexsmith", "johnsmith1", "johnsmith2"]
现在,我知道我可以使用类似的方法来做到这一点,但它只会检查重复名称的第一个“级别”。
if NewUsername in Usernames:
NewUsername = NewUsername + "1"
Usernames.append(NewUsername)
问题:我如何以类似方式处理所有重复项?
答案 0 :(得分:0)
也许有点复杂,但是您可以使用列表的自定义子类。给您一个想法:
from collections import Counter
class UsernameList(list):
def __init__(self, *args):
super(UsernameList, self).__init__()
self._ucount = Counter()
for e in args[0]:
self.append(e)
def append(self, el):
if isinstance(el, str):
if self._ucount[el] == 0:
super(UsernameList, self).append(el)
else:
fixel = el + str(self._ucount[el])
super(UsernameList, self).append(fixel)
self._ucount.update([fixel])
self._ucount.update([el])
else:
raise TypeError("Only string can be appended")
现在您可以:
Usernames = UsernameList(["johnsmith"]) #Username is ["johnsmith"]
Usernames.append("johnsmith") #Username becomes ["johnsmith", "johnsmith1"]
Usernames.append("johnsmith") #Username becomes ["johnsmith", "johnsmith1", "johnsmith2"]
除了新的__init__
和append
方法之外,UsernameList
具有列表的所有方法,并且完全像列表一样工作。不用担心counter属性,它可以跟踪输入的用户名并在重复的情况下添加正确的数字。
为了使内容更一致,您可能需要覆盖其他方法:我只是给您一个想法,而不是在此处编写完整的工作代码。
您可以查看the docs,以获取有关可能需要覆盖哪些方法的更多详细信息。