我有一个非常简单的数组,像这样:
players = []
我想检查用户名是否存在于数组中,如果是,那么用户不应该被添加。我不认为遍历数组是最聪明的方法,因为每次都运行它可能太大了。
我也认为这可能是一个想法,使用一个字典,但从来没有这样做过,所以我不知道如果这将解决我的问题。
我的Player-Class看起来像这样:
class Player:
def __eq__(self, other):
return self._username == other._username
def __init__(self, x, y, name, sprite):
# more stuff
主要的问题是,我需要从两个不同的函数访问这个数组,这就是为什么我可能无法使用if character in players
进行检查
看看完整的代码:
这是我将字符添加到数组中的地方:
@commands.command(name='join')
async def join(self, ctx: commands.Context):
character = Player(random.randint(100, 400), 210, ctx.author.display_name, random.choice(["blue", "red"]))
if character not in players:
await ctx.send(f'You are in, {ctx.author.name}!')
players.append(character)
else:
await ctx.send(f'You are already in, {ctx.author.name}!')
这里我想检查数组中是否已经存在这个名字,所以它会打印“can quest”或“can 't quest,not ingame yet”。
@commands.command(name='quest')
async def quest(self, ctx: commands.Context):
#check if player joined the game
print(players)
await ctx.send(f'{ctx.author.name} joined the quest!')
或类似的?
3条答案
按热度按时间vu8f3i0k1#
你可以使用
any()
和一个解析表达式:这段代码将遍历
players
列表中的每一项,检查该玩家的名字是否为“Fred”。如果找到匹配,它将停止迭代并返回True。
如果它没有找到匹配,它将返回False。
bwleehnv2#
您可以使用字典而不是列表来检查玩家数组中是否存在用户名。与遍历数组相比,字典提供更快的查找时间。
示例:
在这段代码中,玩家字典使用用户名作为键,对应的
Player
对象作为值。当添加一个玩家时,它会检查用户名是否已经存在于字典中。创建一个新的播放器,如果它不存在,则添加到字典中。如果它确实存在,则用户名已经被占用,并且玩家不被计算在内。检查用户名是否存在时,可以使用
in
运算符检查用户名是否是字典中的键。amrnrhlw3#
你建议用字典。下面是你应该如何做:
下面的代码显示了字典的外观