python生成10个随机数并排序_python生成不重复随机数和对list乱序的解决方法-程序员宅基地

技术标签: python生成10个随机数并排序  

andom.sample(list, n)即是从list中随机选取n个不同的元素

# -*- coding: utf-8 -*-

import random

# 从一个list中随机挑选5个

list = [12, 23, 13, 14, 78, 234, 123, 12345]

randomlist = random.sample(list, 5)

print randomlist

# 在range(10)中随机生成5个不重复的数,可以作为随机下标集合,然后到list中取数

len = list.__len__()

indexList = range(len)

randomIndex = random.sample(indexList, 5)

for i in randomIndex:

print "下标为%d" % i

print list[i]

对list进行洗牌,乱序排序,random.shuffle(list),注意原来的list会被改变

# -*- coding: utf-8 -*-

import random

# 对list洗牌,在原list上做改变

list = range(10)

print list

random.shuffle(list)

print "随机排序列表 : ", list

关于生成随机的不重复数,我被面试过两次,有一次的应用场景是抽奖。

我当时提出的解决方案是:将生成的随机数(数组的随机下标)放在一个数组中,每次对新生成的随机数首先判断是否已经存在,如果不存在就加入这个数组,如果存在就重新生成随机数,直到这个数组中的元素个数到达一个特定值,然后拿着这个随机下标数组到原数组中去取元素。面试官问我时间复杂度问我是多少,我说O(n^2),面试官问我有没有改进方案,我想了一会没想出来。

回到宿舍后舍友说,你可以每次对选中的元素和最后元素交换以下,下一次生成随机数的时候就在前n-1个元素中生成,这样每次只要交换一次元素,就不用去那个数组中判断当前下标是否已经被生成过一次,时间复杂度变成O(n),不由佩服。

Java中提供了list.contains(ele)函数,可以直接判断指定容器中是否存在某个元素,这样就不用写二重循环了,但是时间复杂度仍然是O(n^2)

不过今天看了一下python中的sample函数(随机选取种子点)直接就能达到我要的结果,下次再写抽奖函数一行代码就搞定了。

以上这篇python生成不重复随机数和对list乱序的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39892019/article/details/110279459

智能推荐

图书信息管理系统C++_{if(!strcmp(name,book[i].name))-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏45次。实验要求:实验代码;#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <fstream>#include <iomanip>#include <ctype.h>using namespace std;//图书结构体struct Book { double price; ._{if(!strcmp(name,book[i].name))

vue-cli不同版本对比(vue-cli2/cli3/cli4)_vuecli4版本哪个好-程序员宅基地

文章浏览阅读2.1k次,点赞7次,收藏11次。版本/操作vue-cli2vue-cli3/cli4vue-cli下载安装 npm install vue-cli -g npm install -g vue@cli创建新项目vue init webpack 2.0projectvue create 3.0project启动项目npm run devnpm ru..._vuecli4版本哪个好

linux内核添加usb键盘驱动,配置USB外设 - linux-2.6.32在mini2440开发板上移植_Linux编程_Linux公社-Linux系统门户网站...-程序员宅基地

文章浏览阅读902次。linux-2.6.32在mini2440开发板上移植配置USB外设[日期:2013-04-08]来源:Linux社区作者:ssdsafsdsd[字体:大 中 小]编者:因为LINUX内核对S3C2440的Host驱动的已经支持,而且支持的外设相当的丰富,所以这一部分只是进行配置就可以使用。因为配置的东西较多,没有给出详细的截图,看手册上介绍的就很明白。需要手册的请留下邮箱索取。1 配置和测试US..._linux内核识别鼠标需要开启什么配置

hadoop在eclipse上运行实例_hadoop eclipse run as-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏18次。上一篇博客阐述了怎么创建hadoop与eclipse的连接(因为是在GUI版上装的linux版eclipse),所以这一篇不仅介绍怎么做,而且还讲解怎么创建windows上eclipse与linux上的hadoop的连接。(11条消息) Centos7(GUI)下的hadoop与eclipse的连接并运行wordcount实例_qq_45672631的博客-程序员宅基地这里,在hadoop已经成功的前提下,我们在官网下载eclipse (这里用的是2021-06版的)java-jdk(这里用的11._hadoop eclipse run as

PHP使用gearman扩展完成异步任务总结_php5 gearman-程序员宅基地

文章浏览阅读2.2k次。PHP的gearman扩展,可以在Linux服务器上,实现PHP脚本的异步任务,甚至是分布式异步任务。在项目中一些响应慢,或者是占用时间的PHP脚本,可以用异步任务去完成,用户访问时不用等待漫长的队列任务,因为在服务器上有专门跑这些异步任务的脚本。1、安装能执行任务的job(用于执行“work”)#wget http://launchpad.net/gearmand/tru_php5 gearman

【无标题】针对MNIST数据集,构造卷积神经网络实现手写数字识别。_从网上下载或自己编程实现一个卷积神经网络并在手写字符识别数据 mnist上进行实验-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏31次。以pytorch构建的两层卷积核,一层池化层,两层全连接层的神经网络,在Mninst数据 集上训练,准确率达到98%,而且在增加旋转的Mninst数据集上达到97%的准确率。_从网上下载或自己编程实现一个卷积神经网络并在手写字符识别数据 mnist上进行实验

随便推点

关于使用LTC6811/LTC6804断线自检的一些心得-程序员宅基地

文章浏览阅读649次,点赞11次,收藏17次。说起来惭愧,这个问题最初是还是客户先发现的,当时做的是一款用在两厢纯电动(品牌这里就不说了)上面的一体机,总压40串,使用了4片LTC6811-2。前期在家里做断线测试都是“静态”的,没考虑到“动态”的情况,而且当时的关注点都在检测的速度上,客户要求断线告警上报时间不能超过6S。当然为了确保系统正常工作,必须要有一定的自检功能,楼主使用了“命令组”自检、被动均衡自检和断线自检,其中在使用断线自检遇到一个问题,现在将这个问题和大家分享下,共同学习。_ltc6811

android 收藏歌曲功能,基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)...-程序员宅基地

文章浏览阅读978次。作为android初学者,最近把疯狂android讲义和疯狂Java讲义看了一遍,看到书中介绍的知识点非常多,很难全部记住,为了更好的掌握基础知识点,我将开发一个网络音乐播放器-EasyMusic来巩固下,也当作是练练手。感兴趣的朋友可以看看,有设计不足的地方也欢迎指出。开发之前首先介绍下该音乐播放器将要开发的功能(需求):1.本地音乐的加载和播放;2.网络音乐的搜索,试听和下载;3.音乐的断点下..._android收藏本地音乐 原创

项目:电子词典_aggressor bump-程序员宅基地

文章浏览阅读2.6w次。项目:电子词典_aggressor bump

GameFramework教程五、界面,即UI_gameframework splash-程序员宅基地

文章浏览阅读3.3k次。界面,即UI_gameframework splash

三个整数的排序_将输入的三个数放到数组中并排序-程序员宅基地

文章浏览阅读4.1k次。1. 问题描述:问题描述  输入三个数,比较其大小,并从大到小输出输入格式  一行三个整数输出格式  一行三个整数,从大到小排序样例输入33 88 77样例输出88 77 332. 方法一:可以使用Java的三目运算符进行判断得到最大值然后判断剩下来的元素的大小关系,方法二新建一个整型数组把元素存进去然后对数组进行排序然后再逆序输出即可..._将输入的三个数放到数组中并排序

剑指 Offer 14- I. 剪绳子(C++暴力+动态规划、贪心解)_c++剪绳子动态规划法-程序员宅基地

文章浏览阅读627次。一、题目剑指 Offer 14- I. 剪绳子题目描述给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例2:输入: 10输出: 36解释: _c++剪绳子动态规划法

推荐文章

热门文章

相关标签