python - 在Python中同时从列表中获取随机值及其位置
问题描述
我想知道 Python 中是否有一种方法可以同时从列表中获取它的随机值及其位置。
我知道我可以分两步做到这一点:
list_index = random.randrange(len(my_list))
list_value = my_list[index]
如果 list 中有 0 值,我也想排除。我不能使用 random() 1st 来获取位置,因为这样我需要递归调用 random() 直到我没有得到 0。
另一种可能性是调用 random() 来获取列表中的值并排除 0,但是使用此实现,例如,如果有两个(或更多)相同的值,Python 会输出第一个位置:
Example:
[3 5 6 8 5 0]
Random's output value = 5
Position = 1
But 5 value is also in position 4
我该如何实施?可行吗?我一直在网上思考和搜索,但找不到任何东西。
真的提前谢谢你。
亚历克斯
解决方案
在python 3.7之前,您可以使用列表的enumerate()
d 值列表 - 由于内存消耗,这可能会在长列表中中断:
data = [3, 5, 6, 8, 5, 7]
import random
pos, item = random.choice(list(enumerate(data)))
print("pos:", pos, "itemvalue:", item)
输出:
pos: 2 itemvalue: 6
使用python 3.8,您可以使用walrus 运算符,使其适用于任何长度的列表:
data = [3, 5, 6, 8, 5, 7]
import random
print("pos:", p := random.choice(range(len(data))), "itemvalue:", data[p])
输出:
pos: 0 itemvalue: 3
第一个变体从包含位置和值的元组中进行选择 - 第二个变体在列表中选择一个随机索引并访问该位置的列表以获取值。
您从输入列表中获取随机值 - 为避免零,您可以循环直到获得非零值:
data = [0, 0, 5, 0, 0, 5, 0, 0, 5]
import random
for _ in range(10):
item = 0
while item == 0:
pos, item = random.choice(list(enumerate(data)))
# pos, item = (p := random.choice(range(len(data))), data[p])
print("pos:", pos, "itemvalue:", item)
输出:
pos: 8 itemvalue: 5
pos: 8 itemvalue: 5
pos: 5 itemvalue: 5
pos: 8 itemvalue: 5
pos: 2 itemvalue: 5
pos: 5 itemvalue: 5
pos: 2 itemvalue: 5
pos: 8 itemvalue: 5
pos: 5 itemvalue: 5
pos: 8 itemvalue: 5
推荐阅读
- sqlite - 在 SQL case 语句中显示相同的值
- java - 部署在 Eclipse 中构建的 Java 桌面应用程序
- mongodb - Mongo db 首次安装
- php - 转到 VSCode 中 PHP 扩展的定义
- javascript - 如何查看太大而无法在 CLI 中使用的大型对象(例如,作为响应对象)
- php - PHP laravel 列搜索无法有效地使用 ->editcolumn getdatatable
- python - Xpath 不返回 TEXT 表单
Scrapy Shell 中的标签
- c++ - stack.size() 与 stack.empty()
- java - 在java中将XML文件保存到TXT
- python-3.x - 将循环结果添加为数据框中的行