【Python】【排序】对list中的20个元素在一定条件下进行排序

Python3 list 排序函数详解 Python3 list 排序函数详解 一、列表的sort排序函数 函数原型: list.sort(key=None,reverse=False) 函数功能: 对原列表进行排序,完成排序后,原列表变为有序列表。默认情况(不传入任何参数时)按字典顺序排序。 函数参数: (1)key: 主要是用来进行比较的元素,只有一个参数,具体的函数的... 阅读详情

一、问题
1. 将20位同学随机分成五组,每组4人
2. 且20位同学中有三位不会Python,不能分在同组
3. 且20位同学中有8位女生,每组要求至少1名女生
二、解决
1. 随机排序问题
1) 应用random包产生一组1~20的随机数,对应元素在list中的顺序

import random
rank = random.sample(range(1,21),20)
name = ["zhao","qian","sun","li","zhou","wu","zheng","wang","feng","chen","chu","wei","jiang","shen","han","yang","zhu","qin","you","xu"]
group1 = []
group2 = []
group3 = []
group4 = []
group5 = []
group = [group1, group2, group3, group4, group5]
for m in range(0,5):		#对不同的组进行操作
    for n in range(1,5):	#添加每个组内的组员
        group[m].append(name[rank.index(n+m*4)])
for i in range(1,6):		#打印每个组的组员
    print("The students in group "+str(i)+" are "+str(group[i-1]))

这种方法是一种不用排序的排序算法。
2) 应用random包的shuffle函数直接排序

from random import shuffle
name = ["zhao","qian","sun","li","zhou","wu","zheng","wang","feng","chen","chu","wei","jiang","shen","han","yang","zhu","qin","you","xu"]
shuffle(name)
#以下步骤同上,略
  1. 三位不会的单独分组
from random import shuffle
name = ["zhao","qian","sun","li","zhou","wu","zheng","wang","feng","chen","chu","wei","jiang","shen","han","yang","zhu","qin","you","xu"]
shuffle(name)

group1 = []
group2 = []
group3 = []
group4 = []
group5 = []
group = [group1, group2, group3, group4, group5]
for m in range(0,5):
    for n in range(0,3):
        group[m].append(name[n+m*3])	#先把name列表中的前十五个分到五组
group1.append(name[-1])			#把name列表的最后两个人分到第1、2组
group2.append(name[-2])
group3.append("CannotPY1")		#最后把不会python的三位同学分到3、4、5组
group4.append("CannotPY2")
group5.append("CannotPY3")
for i in range(1,6):
    print("The students in group "+str(i)+" are "+str(group[i-1]))
  1. 先给每组分配一位会python的女生,剩下的会python的女生和会python的男生合并分配至不同组,最后分配不会python的
from random import shuffle
GirlCanPY = ["zzhao","qqian","ssun","lli","zzhou","wwu","zzheng","wwang"]
RestCanPY = ["feng","chen","chu","wei","jiang","shen","han","yang","zhu","qin","you","xu"]
CannotPY = ["CannotPY1","CannotPY2","CannotPY3"]
shuffle(GirlCanPY)
group1 = []
group2 = []
group3 = []
group4 = []
group5 = []
group = [group1, group2, group3, group4, group5]
for m in range(0,5):
    group[m].append(GirlCanPY[0])	#取会python的前五个女生分配到1-5组
    del GirlCanPY[0]			#取完则删除,一是为了下一组继续取,二是为了之后将没取过的合并到RestCanPY
for x in GirlCanPY:
    RestCanPY.append(x)			#合并所有的能用python的男女生
shuffle(RestCanPY)
for m in range(0,5):
    for n in range(0,2):
        group[m].append(RestCanPY[n+m*2])#随机后将会python的人分配到5组
group1.append(RestCanPY[-1]) 		#分配还没分配过的
group2.append(RestCanPY[-2])
group3.append(CannotPY[0]) 		#分配不会python的
group4.append(CannotPY[1])
group5.append(CannotPY[2])
for i in range(1,6):
    print("The students in group "+str(i)+" are "+str(group[i-1]))
  1. (更新)问题模型最终确定为:
    条件:班里共20位同学,其中不会Python有3人,本专业会Python男女各六人,外专业会Python5人且均为男生。
    要求:每组最多一个不会编程的,最少一个女生,且有一个外专业的。
    新代码的改变处进行了注释如下:
from random import shuffle

#把非本专业但会用Python的单独分离为OthersCanPY
OthersCanPY = ["ocp1","ocp2","ocp3","ocp4","ocp5"]
GirlCanPY = ["gcp1","gcp2","gcp3","gcp4","gcp5","gcp6"]
RestCanPY = ["rcp1","rcp2","rcp3","rcp4","rcp5","rcp6"]
CannotPY = ["cnp1","cnp2","cnp3"]
group1 = []
group2 = []
group3 = []
group4 = []
group5 = []
group = [group1, group2, group3, group4, group5]

#把每个数组都随机排序,保证随机性
shuffle(GirlCanPY)
shuffle(OthersCanPY)
shuffle(RestCanPY)
shuffle(CannotPY)

#这里其实有个默认前提,就是GirlCanPY与OthersCanPY的人数都大于5
for m in range(0,5):
    group[m].append(GirlCanPY[0])
    del GirlCanPY[0]
for m in range(0,5):
    group[m].append(OthersCanPY[0])
    del OthersCanPY[0]

#把分配一轮过后剩下的人都加入RestCanPY,乱序后入组
for x in GirlCanPY: 
    RestCanPY.append(x)
for x in OthersCanPY:
    RestCanPY.append(x)
shuffle(RestCanPY)
for m in range(0,5):
    for n in range(0,1):
        group[m].append(RestCanPY[n+m*1])

#把5组随机排序,目的是保证CannotPY入组随机性
shuffle(group)
group[0].append(RestCanPY[-1])
group[1].append(RestCanPY[-2])
group[2].append(CannotPY[0])
group[3].append(CannotPY[1])
group[4].append(CannotPY[2])

for i in range(1,6):
    print("The students in group "+str(i)+" are "+str(group[i-1]))

三、反思

  1. 随机性:进行随机分组时,除了可以将内部元素进行shuffle,再加入小组,还可以先把小组shuffle再顺序添加元素,实际也是随机。但是一个没有解决的问题是,为什么实际执行代码时,不会PY的三个人必定分到group3,4,5
  2. 可移植性:一个问题是,如果GirlCanPY和OthersCanPY的人数小于5,分组规则可能也会变化,情况更加复杂,代码需要调整;同时需要解决某特定类人的集合内元素数小于组数时,如何才能将这些人随机分配到各个组,而非比如必定分到group3,4,5的情况
Python代码实现删除一个list里面重复元素的方法 今天小编就为大家分享一篇关于Python代码实现删除一个list里面重复元素的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 网上学习了的两个新方法,代码非常之简洁。看来,不是只要实现了基本功能就能交差滴,想要真的学好python还有很长的一段路呀 方法一:是利用map的fromkeys来自动过滤重复值,map是基于hash的,大数组的时候应该会比排... 阅读详情

相关推荐

Python|random之随机抽人分组

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。引言random库让Python语言有了灵魂,random是python函数中非常实用的函数之...

算法与编程之美 5925

Python对班级进行随机分组并随机指定组长

第3项目组由8位成员组成,名单如下: [50, 23, 34, 28, 47, 38, 11, 27] ,项目主管是: 38 号同学,请服从分配且称职,酌情加分!|第1项目组由8位成员组成,名单如下: [39, 25, 20, 21, 7, 16, 37, 22] ,项目主管是: 25 号同学,请服从分配且称职,酌情加分!|第2项目组由8位成员组成,名单如下: [30, 46, 35, 8, 26, 44, 42, 14] ,项目主管是: 14 号同学,请服从分配且称职,酌情加分!

灰灰老师 2346

Python3 - list sort方法实现多条件自定义排序

Python3 list sort 多条件自定义排序

优快云 5975

使用python随机排列名单

使用python随机排列名单

LAPfung的博客 1278

基因家族快速鉴定指南:Windows平台下的HMMER实战解析

本文详细解析了在Windows平台下使用HMMER工具进行基因家族快速鉴定的完整实战流程。通过手把手指导,从软件获取、数据准备到模型构建与序列搜索,帮助生物信息学新手无需Linux环境,即可高效完成bZIP转录因子等家族的鉴定工作,大幅降低分析门槛。

weixin_29255731的博客 453

eNSP安装教程

eNSP安装教程一、安装eNSP1、先安装依赖组件2、安装eNSP主程序eNSP+V100R003C00SPC100+Setup ---不要安装在中文路径下3、安装完成后注册设备 一、安装eNSP 程序包位置:https://drive.weixin.qq.com/s?k=AOgAQQfOAAsw1wAKEgAAcAbgbSAKQ 1、先安装依赖组件 依赖组件: WinPcap_4_1_3 —直接下一步,但不要安装在中文路径下 Wireshark_v3.4.6 或者wireshark-win3

qimowei的博客 8667

python 随机分组

列表随机分成n组,每len/n个一组 #列表随机分组 from random import shuffle list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "...

azeyeazeye的博客 2万+

量子城域网建设设备系列(三):网络管理系统(NMS)

本文对量子网络中的网络管理系统进行了初步的介绍。

量子领域相关话题 2012

python 对字符串list中的元素进行排序

python 对字符串list中的元素进行排序引言利用`sort() 函数`对list进行排序利用`sorted() 函数`对list进行排序`sorted()函数`的可迭代对象iterable为字典时字典 in 操作符按照字符串中的数字的大小进行排序 引言 sort() 函数和sorted() 函数的区别: sorted() 函数可以对所有可迭代的对象 iterable进行排序操作,但是sort()函数 只能应用在 list 上的方法。 list 的 sort 方法返回的是对已经存在的列表进行操作,无返

Yale-曼陀罗 1万+

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 334

doris2.1.8连接报错ERROR 1203 (42000): Reach limit of connections解决办法

摘要:客户Doris数据库报错"ERROR 1203 (42000): Reach limit of connections"的解决过程。发现AI提供的解决方案存在错误:1)查询命令应为SHOW FRONTEND CONFIG而非show variables;2)参数名称应为qe_max_connection而非max_connections。正确解决步骤:1)用admin账户登录查看连接数限制和当前连接数;2)通过SHOW PROPERTY命令检查用户资源限制;3)针对不同情况修改参数

Brent的专栏 1761

python对list元素排序_Python对List中的元素排序的方法

Python对List中的元素排序的方法首先定义一个compare函数:def compare(sf1, sf2):if (sf1.value > sf2.value):return -1;elif (sf1.value == sf2.value):return 0;else:return 1;然后调用该函数就可以对List中的元素排序:listA.sort(compare)要求ListA中...

weixin_28893183的博客 2193

【Java基础知识 19】Java接口的作用和意义

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

学Java,找哪吒 2万+

Python list sort方法:列表排序

Python 列表排序方法 sort的介绍、使用和注意事项。

TCatTime的博客 4万+

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 7万+

BART non-Cartesian 重建:并行成像 压缩感知

本文主要使用并行成像和压缩感知方法实现non-Cartesian MRI 数据的重建。

张哥频道:电生理信号和磁共振成像 1181

python对列表中的元素(字典)进行排序

1. 按照字典元素中的t值的下标大小进行排序 由于t值是字符串类型,那么需要将下标截取出来,然后再对name进行排序 a = [ { "value": "用途", "name": "t4" }, { "value": "期初累计摊额", "name": "t10" }, { "value": "原值", "name": "t5" }, ...

Dream_it_possible!的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Python中的 List

List如何判断重复 根据 list 里面每个 list 的第一个元素排序 一个 list 给另一个 list 赋值 list 在遍历过程中删除元素的四种方法 报错汇总

CICI❤️的博客 3888

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python对list列表进行排序方法总结

使用sort()函数 sort()函数的语法格式为:list.sort( key=None, reverse=False) 其中: key 参数(可选)指定可迭代对象中的某个元素进行排序。 reverse 参数(可选)表示排序规则,包含升序(False)和降序(True),默认是False升序排序。 该方法没有返回值,示例如下: #!/usr/bin/env python # -*- coding:utf-8 -*- if __name__ == '__main__': t1 = [[

程序星空实验室 2万+

python中列表元素的排序与反转

python语言中的列表排序方法有三个:reverse反转排序、sort排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 1、reverse反转排序 reverse() 函数没有返回值,但是会对列表的元素进行反向排序。 list = [2, 1, 3, 5, 4] list.reverse() print(list) #[4, 5, 3, ...

zhw864680355的博客 1万+

python:如何对list元组进行排序

python:如何对列表/元组进行排序(list/tuple) 链接:https://www.codenong.com/3121979/ data = [[1,2,3], [4,5,6], [7,8,9]] data = [(1,2,3), (4,5,6), (7,8,9)] 我想按子集中的第二个元素排序。也就是说,按2,5,8排序,其中2来自(1,2,3),5来自(4,5,6)。通常的方法是什么?我应该在列表中存储元组或列表吗? sorted_by_second = sorted(data, key

sdf57的博客 1万+

python 列表排序按照第一个元素_Python中list元组如何按照第二维元素排序

list = [2,5,8,9,3]list[2,5,8,9,3]list.sort()list[2, 3, 5, 8, 9]方法2.用序列类型函数sorted(list)进行排序Python实例:list = [2,5,8,9,3]list[2,5,8,9,3]sorted(list)[2, 3, 5, 8, 9]两种方法的区别:sorted(list)返回一个对象,可以用作表达式。原来的lis...

weixin_30453651的博客 4524

python中的排序

python中排序有两个函数第一个是sort(),第二个是sorted(),sort函数对序列进行永久性的改变,sorted函数在排序后会生成一个新的序列,原序列不变。 lst=[1,3,2] lst,sort() print lst # 输出结果如下 # [1,2,3] lst=[1,3,2] print sorted(lst) pritn lst # 输出结果如下 # [1,2,3...

菜鸟更要努力呀 1万+

python中关于list对根据某个元素进行排序

一.对列表进行排序 我们最长使用的是list.sort()对列表中的所有元素进行排序,但是对于一个字符串,我们要根据字符串中的某个元素进行排序,这要需要使用sort中的参数进行排序, 例如: cnt.sort(key = lambda x:cmd(x), reverse=True) 这里x可以定义一个函数,去实现你要排序的内容,例如: line_one:117.0022,39.7972,line_tow:117.0053,39.7973,diff:9.14 中对diff之后的字符串进行...

lqijlyy的博客 3449

python 对list中的每个元素处理_python3 对list中每个元素进行处理的方法

python3 对list中每个元素进行处理的方法在写代码过程中我们常常可能会遇到这样一种情况,要对一个list中的每个元素做同样的操作时,两种方法方法一:循环遍历每个元素话不多说,上代码a = [1,2,3]for i in range(len(a)):a[i] += 1输出a[2, 3, 4]方法二:用map函数def y3(x):x+=1return xmap(y3, a)但是map函数返回...

weixin_30323179的博客 8430
上一篇: 【R】【编码】R读取csv文件时中文显示为乱码的问题
下一篇: 【python】【kNN】【OCR】用python实现字符识别
why_not_study
博客等级 码龄7年 34粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值