我想提出一个不同的解决方案:这里的输出是有序的

我想提出一个不同的解决方案:

from random import shuffle
from itertools import cycle
from pprint import pprint
country_code = list(range(11, 24))

operator_code = list(range(67, 99))
exchange_code = list(range(100, 999))
terminal_code = list(range(1234, 9999))

target_len = 100000
ls = set()
while len(ls) 
    shuffle(exchange_code)
    shuffle(terminal_code)
    numbers = zip(cycle(country_code), cycle(operator_code), cycle(exchange_code), terminal_code)
    for c, o, e, t in numbers:
        ls.add(f"{c} {o}{e}-{t}")

pprint(ls)
print(len(ls))
# To randomize final output

ls = [i for i in ls]
shuffle(ls)

这里的输出是有序的,因为集合是有序的,但它使用随机播放和循环来稍微改进随机化,并确保您不会在集合的约束下重复数字。大多数时候,我将它作为一种以不同方式思考随机化的方式——虽然选择带有替换的随机数 (randint) 是一种方法,但 shuffle() 和 choice() 都是确保随机性的好方法,你可以用 zip 做一些事情() 和 cycle() 创建您选择的随机流。

这个问题的真正解决方案是创建一个生成器函数——我必须更加努力地思考如何去做,但这也是一个可能的解决方案。

© 版权声明
THE END
喜欢就支持一下吧
点赞283 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片