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

Python 如何从列表中选择随机项,同时排除以前的随机项?,python,list,random,Python,List,Random,我正在尝试创建一个脚本,允许我在按下按钮时使用mpg123从列表中随机播放圣诞广播电台。我遇到的问题是,很多时候,同一个电台都会播放。我把清单弄得乱七八糟,但很难让它发挥作用。我还没有连接按钮,所以我让脚本暂停,然后再运行。这是到目前为止的车站 station1 = "http://185.33.21.112:80/christmas_128" station2 = "http://71.127.174.26:8020/hollyfm2" station3

我正在尝试创建一个脚本,允许我在按下按钮时使用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]


任何帮助都将不胜感激

对于单线解决方案:

所选=station\u list.poprandom.randrangelenstation\u 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:
    ...

从列表中选择某个内容后,使用del将其从列表中删除。 或者保留一个选定列表,如果它在以前选定的列表中,则重新随机运行

随机输入 车站1=http://185.33.21.112:80/christmas_128 车站2=http://71.127.174.26:8020/hollyfm2 车站3=http://76.115.146.246:8128 车站4=http://85.25.217.22:8050/christmas 车站列表=[车站1、车站2、车站3、车站4] 同时,请列出: i_sel=random.randint0,lenu station_list-1 sel=站点列表[i\U sel] del station_列表[i_sel] 普林塞尔
如果您想要一个解决方案,即每次按下按钮都会切换到不播放的随机电台,您可以使用以下方法:

随机输入 def非重复性RC: seq=src[:] random.shuffleseq 尽管如此: 项目=序号[0] 收益项目 seq=seq[1:] random.shuffleseq 附件项目 站点列表=['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=非重复站点列表 这里的例子是播放20个电台 对于范围20内的uu: printnextg
我只是在写同样的答案。你赢了我20秒。我建议还保存原始列表,以便在列表中的最后一个电台弹出后能够重新开始。@Karl这篇文章有一些建议,如果看不到其余的实现,就很难知道什么是理想的。我认为你错过了一个机会_list@Karl-我是这样做的:def radio\u play:global station\u list selected=station\u list.poprandom.randrangelenstation\u list print selected radio\u play=subprocess.call[mplayer,selected]长度=lenstation\u list如果长度<1:station\u list=[station1,station2,station3,station4]似乎可以工作!谢谢大家!!我不确定如何一次通过一个循环;你被困在哪里了?这看起来会很有帮助,但我担心我不太了解这里发生的事情,因为python是新的,并且有一个已完成的项目:/.g是一个生成器,每次调用“nextg”时,都会从“yield item”返回一个值。如果您有一个按钮事件,您可以调用“nextg”随机获得不同的电台。