鱼C论坛

 找回密码
 立即注册
查看: 1467|回复: 15

把一个4元素的列表随机分成2维2元素

[复制链接]
发表于 2018-6-5 15:16:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想在[1,2,3,4],随机分成2*2的形式,比如分成[[1,4],[2,3]]
  1. import random
  2. a=[int(i) for i in input('请输入偶数个整数,数字之间用中文逗号隔开').split(',')]
  3. lenth=len(a)
  4. k=[]
  5. while lenth>0:
  6.     b=random.sample(a,2)
  7.     k.append(b)
  8.     for each in b:
  9.         a.remove(each)
  10. print(k)
复制代码

执行后报错ValueError: Sample larger than population or is negative
求大佬解释哪里错了,该怎么改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-5 15:34:51 | 显示全部楼层
随着remove,当a中元素小于2以后random.sample(a,2)就会出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 15:35:47 | 显示全部楼层
while循环中修改一下lenth的值
lenth -= 2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 15:39:36 | 显示全部楼层
可以这样改:
  1. import random
  2. a=[int(i) for i in input('请输入偶数个整数,数字之间用中文逗号隔开').split(',')]
  3. k=[]
  4. while len(a):
  5.     b=random.sample(a,2)
  6.     k.append(b)
  7.     for each in b:
  8.         a.remove(each)
  9. print(k)
复制代码


或者
  1. import random
  2. a=[int(i) for i in input('请输入偶数个整数,数字之间用中文逗号隔开').split(',')]
  3. random.shuffle(a)
  4. b = []
  5. for i in range(0, len(a),2):
  6.     b.append([a[i], a[i + 1]])
  7. print(b)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 15:47:07 | 显示全部楼层
本帖最后由 fan1993423 于 2018-6-5 15:48 编辑


谢谢,我发现就我源代码,不用lenth=len(a),whlie lenth>0而直接用while len(a)>0就可以了,大佬能说一下原因吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 15:52:50 | 显示全部楼层

另外冬雪大佬,我问一下就是while嵌套for是个什么执行规则,就比如我这个,是先whlie执行一句,然后for执行一句,然后又回到whlie执行下一句,还是在while执行一句后,然后把for语句执行完了,才执行下一句whlie呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 15:58:22 | 显示全部楼层
fan1993423 发表于 2018-6-5 15:47
谢谢,我发现就我源代码,不用lenth=len(a),whlie lenth>0而直接用while len(a)>0就可以了, ...

在while循环外lenth=len(a),lenth的值是固定的,而while len(a)>0,则随着a的变化 len(a)也同时改变。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 15:58:56 | 显示全部楼层
fan1993423 发表于 2018-6-5 15:52
另外冬雪大佬,我问一下就是while嵌套for是个什么执行规则,就比如我这个,是先whlie执行一句,然后for执 ...

在while执行一句后,然后把for语句执行完了,才执行下一句whlie
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 16:00:16 | 显示全部楼层
冬雪雪冬 发表于 2018-6-5 15:58
在while执行一句后,然后把for语句执行完了,才执行下一句whlie

谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 16:00:49 | 显示全部楼层
冬雪雪冬 发表于 2018-6-5 15:58
在while循环外lenth=len(a),lenth的值是固定的,而while len(a)>0,则随着a的变化 len(a)也同时改变。

那对于我这个列子,是不是lenth一直保持在4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 16:02:34 | 显示全部楼层
冬雪雪冬 发表于 2018-6-5 15:58
在while执行一句后,然后把for语句执行完了,才执行下一句whlie

那不管for嵌套for,还是whlie嵌套for,是不是都是循环1执行一句,然后把循环2执行完了才执行下一句循环1(假设循环1嵌套循环2)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 16:02:46 | 显示全部楼层
fan1993423 发表于 2018-6-5 16:00
那对于我这个列子,是不是lenth一直保持在4

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 16:04:28 | 显示全部楼层
fan1993423 发表于 2018-6-5 16:02
那不管for嵌套for,还是whlie嵌套for,是不是都是循环1执行一句,然后把循环2执行完了才执行下一句循环1( ...

外层循环执行一次后,执行完内层循环,再执行第二次外层循环,再执行完内层循环......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 16:07:02 | 显示全部楼层
冬雪雪冬 发表于 2018-6-5 16:04
外层循环执行一次后,执行完内层循环,再执行第二次外层循环,再执行完内层循环......

谢谢哈,循环套循环的规则我以前就一直有疑问,谢谢讲解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 16:08:56 | 显示全部楼层
冬雪雪冬 发表于 2018-6-5 16:04
外层循环执行一次后,执行完内层循环,再执行第二次外层循环,再执行完内层循环......

那如果是三层循环的话,是不是循环1和循环2执行一句,先让循环3执行完,然后循环2执行第二句,又让循环3执行完,等循环2执行完了后,才执行循环1的第二句,是不是这样理解的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-5 16:10:12 | 显示全部楼层
fan1993423 发表于 2018-6-5 16:08
那如果是三层循环的话,是不是循环1和循环2执行一句,先让循环3执行完,然后循环2执行第二句,又让循环3 ...

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-30 16:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表