从预定义的区间a=10000中提取,b=99999将用随机值填充列表(lst),同时考虑到以下原则:在偶数索引上,站立位数之和等于奇数指数上的站立位数之和。
发布于 2022-10-22 19:04:35
这里有一个命中即失的生成器,它可以很好地适用于范围内的数字:
import random
def even_odd_places(n):
evens = []
odds = []
for i,d in enumerate(str(n),start = 1):
if i % 2 == 0:
evens.append(int(d))
else:
odds.append(int(d))
return evens,odds
def check_condition(n):
e,o = even_odd_places(n)
return sum(e) == sum(o)
def rand_nums(a,b,max_tries = 1000):
tries = 0
while True:
tries += 1
n = random.randint(a,b)
if check_condition(n):
tries = 0
yield n
else:
if tries == max_tries:
return None
例如:
g = rand_nums(10000, 99999)
s = [next(g) for _ in range(10000)]
print(s[:5])
#typical output: [25641, 45980, 38225, 34320, 94380]
要比一种不择手段的方法更好,就需要进行一些非平凡的数学分析。在给定的范围内生成满足目标条件的所有数字是不容易的。
https://stackoverflow.com/questions/74165825
复制相似问题