如何从列表中选择随机项,同时排除以前的随机项?

2024-06-08 23:53:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个脚本,允许我在按下按钮时使用mpg123从列表中随机播放圣诞广播电台。我遇到的问题是,很多时候,同一个电台都会播放。我把清单弄得乱七八糟,但很难让它发挥作用。我还没有连接按钮,所以我让脚本暂停,然后再运行。这是到目前为止的车站

station1 = "http://185.33.21.112:80/christmas_128"
station2 = "http://71.127.174.26:8020/hollyfm2"
station3 = "http://76.115.146.246:8128"
station4 = "http://85.25.217.22:8050/christmas"

station_list = [station1, station2, station3, station4]

任何帮助都将不胜感激


Tags: 脚本http列表按钮电台station车站发挥作用
3条回答

对于单线解决方案:

chosen = station_list.pop(random.randrange(len(station_list)))

这会从列表的长度中选择一个随机索引,将其pop取出(从列表中删除),并将其分配给chosen变量

此外,如果您只是想将字符串变量放在列表中,那么定义字符串变量是多余的,我会这样做 station_list = ['http://185.33.21.112:80/christmas_128', 'http://71.127.174.26:8020/hollyfm2', 'http://76.115.146.246:8128', 'http://85.25.217.22:8050/christmas']

只需洗牌列表,然后按顺序遍历电台:

import random
random.shuffle(station_list)
for station in station_list:
    ...

如果您想要一个解决方案,即每次按下按钮都会切换到不播放的随机电台,您可以使用以下方法:

import random

def non_repeating(src):
    seq = src[:]
    random.shuffle(seq)
    while True:
        item = seq[0]
        yield item
        seq = seq[1:]
        random.shuffle(seq)
        seq.append(item)

station_list = ['http://185.33.21.112:80/christmas_128', 'http://71.127.174.26:8020/hollyfm2', 'http://76.115.146.246:8128', 'http://85.25.217.22:8050/christmas']

g = non_repeating(station_list)

# The example here is to play 20 stations
for _ in range(20):
    print(next(g))

相关问题 更多 >