python 检查数组是否包含具有特定字符串的对象

o75abkj4  于 2023-06-28  发布在  Python
关注(0)|答案(3)|浏览(159)

我有一个非常简单的数组,像这样:

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!')

或类似的?

vu8f3i0k

vu8f3i0k1#

你可以使用any()和一个解析表达式:

if any(player.username == "Fred" for player in players)

这段代码将遍历players列表中的每一项,检查该玩家的名字是否为“Fred”。
如果找到匹配,它将停止迭代并返回True。
如果它没有找到匹配,它将返回False。

bwleehnv

bwleehnv2#

您可以使用字典而不是列表来检查玩家数组中是否存在用户名。与遍历数组相比,字典提供更快的查找时间。
示例:

players = {}

# Adding players
username = "example"
if username not in players:
    character = Player(username)
    players[username] = character
    print("Player added successfully.")
else:
    print("Username already exists.")

# Checking if the username exists
username = "example"
if username in players:
    print("Username exists.")
else:
    print("Username does not exist.")

在这段代码中,玩家字典使用用户名作为键,对应的Player对象作为值。当添加一个玩家时,它会检查用户名是否已经存在于字典中。创建一个新的播放器,如果它不存在,则添加到字典中。如果它确实存在,则用户名已经被占用,并且玩家不被计算在内。
检查用户名是否存在时,可以使用in运算符检查用户名是否是字典中的键。

amrnrhlw

amrnrhlw3#

你建议用字典。下面是你应该如何做:

players = {}
# This is how you add a player
if user_name not in players:
    players[user_name] = Player(user_name)
else:
    print(f"{user_name} already exists")

下面的代码显示了字典的外观

{'Michelle': Player('Michelle'), 'Raul': Player('Raul')}

相关问题