如何将此 random.choices python 列表转换为字符串?

Posted

技术标签:

【中文标题】如何将此 random.choices python 列表转换为字符串?【英文标题】:How can I convert this random.choices python list to a string? 【发布时间】:2020-10-10 20:53:49 【问题描述】:

我正在使用 Python 制作 Discord 机器人, 我希望机器人对随机消息做出反应,使用random.choice 可以正常工作 不过,我想补充一点。我发现random.choices(文档here) 您可以将权重添加到您的列表中,这样一些权重会比其他一些更频繁地被挑选。 现在我有:

@bot.event
async def on_member_join(channel):
    time.sleep(2)

    channel = bot.get_channel(723954693826674701)
    brankos_greetings = [
        "testMessageCommon1",
        "testMessageCommon2",
        "testMessageCommon3",
        "testMessageCommon4",
        "testMessageCommon5",
        "testMessageCommon6",
        "testMessageCommon7",
        "testMessageCommon8",
        "testMessageCommon9",
        "testMessageCommon10",

        "testMessageSemiRare1",
        "testMessageSemiRare2",
        "testMessageSemiRare3",
        "testMessageSemiRare4",
        "testMessageSemiRare5",
        "testMessageSemiRare6",
        "testMessageSemiRare7",

        "testMessageRare1",
        "testMessageRare2"
    ]

    weights = [
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,

        0.03,
        0.03,
        0.03,
        0.03,
        0.03,
        0.03,
        0.03,
        
        0.01,
        0.01,
    ]

    response = random.choices(brankos_greetings, weights, k = 1)
    await channel.send(response)

但是,这会在聊天中提供以下输出:['testMessageCommon1'] ['testMessageRare1']。等等

我尝试过: response = str(random.choices(brankos_greetings, weights, k = 1))

await channel.send(str(response))

response = random.choices(brankos_greetings, weights, k = 1).strip('[]')

await channel.send(response.strip(['']))

但没有任何效果。

所以我的问题是:如何将这里的列表转换为字符串?

【问题讨论】:

我忘了补充 我也试过了 一个简单的问题:['who dis']['hi'] 来自哪里?这些是您在brankos_greetings 中拥有的吗? 抱歉,机器人实际上是这么说的,但我在实际列表中将其更改为更好理解的内容。 是关于单词周围的 [] 和 '' 【参考方案1】:

我认为这可能有效 response = " ".join(response)

【讨论】:

【参考方案2】:

您可以使用 join() 方法将字符串数组连接在一起。

response = ' '.join(random.choices(brankos_greetings, weights, k = 1))

【讨论】:

【参考方案3】:

random.choices() 以列表形式返回结果。由于您有k=1,这意味着返回的结果将是一个包含一个元素的列表。要将该元素作为消息发送,您需要索引并访问该元素。换句话说,

response = random.choices(brankos_greetings, weights, k = 1)
await channel.send(response[0]) # index the first (zeroth) element

【讨论】:

非常感谢,已解决! 很高兴它有帮助!

以上是关于如何将此 random.choices python 列表转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

基本编程题 --python

random模块

python随机模块random的22种函数

python3学习之random

2018.10.16python学习第二十天

随机整数函数