Python3下如何不使用If语句生成[-x,x]范围内的非零随机整数?
实现[-x, +x]范围内的非零随机整数(单行低内存版)
嘿,这个游戏里角色转向的需求很实际啊!我来给你分享几种单行、内存友好的Python实现方式,每种都有不同的适用场景:
直观列表选择法(适合x较小的场景)
直接生成排除0的区间列表,再随机选取元素,写法非常直白:import random def rand_nonzero(x): return random.choice([i for i in range(-x, x+1) if i != 0])优点是逻辑清晰,一眼就能看懂;缺点是当x很大时,生成的列表会占用较多内存,所以更适合x值不大的游戏场景。
分区间生成法(内存最优,适合大x场景)
把目标范围拆成[-x, -1]和[1, x]两个非零区间,先随机选区间再生成对应数值,完全不用生成中间列表,内存占用极低:import random def rand_nonzero(x): return random.randint(-x, -1) if random.random() < 0.5 else random.randint(1, x)这种写法在x很大的时候优势特别明显,不会因为生成大列表额外消耗内存,运行效率也很高。
递归重试法(最简洁的单行写法)
先生成整个区间的随机数,如果拿到0就重新调用自己,直到得到非零值:import random def rand_nonzero(x): n = random.randint(-x, x); return n if n != 0 else rand_nonzero(x)这个写法最简洁,而且不管x多大,内存里只需要存一个临时整数变量,非常省内存。唯一需要注意的是,当x=1时,只有-1和1两个选项,几乎不会触发递归,完全不用担心栈溢出的问题。
内容的提问来源于stack exchange,提问作者Adi219
相关产品推荐
相关产品推荐

