随机数字符串,每个字符串均具有排除项

时间:2019-01-12 08:19:35

标签: python

如果每个数字都有至少一个不能跟随它的数字,如何在1-14之间生成100个随机数字的字符串? 例如,“ 1”后不能跟“ 3”,“ 2”后不能跟“ 4”或“ 9”。 也不重复,因此不能立即跟随另一个“ 1”。

2 个答案:

答案 0 :(得分:0)

要获取随机数,可以使用random模块,尤其是random.randintrandom.choice,以下代码将产生100范围内的1...14个随机数(包含在内),但不重复:

numbers = [random.choice(range(1,14+1))]
while len(numbers)<100:
    lastnumber = numbers[-1]
    newnumber = random.choice([i for i in range(1,14+1) if i!=lastnumber])
    numbers.append(newnumber)

编辑:跟随版本将阻止跟随特定的数字

numbers = [random.choice(range(1,14+1))]
tabu = [[1,2],[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7],[6,7,8],[7,8,9],[8,9,10],[9,10,11],[10,11,12],[11,12,13],[12,13,14],[13,14]]
while len(numbers)<100:
    lastnumber = numbers[-1]
    newnumber = random.choice([i for i in range(1,14+1) if not i in tabu[lastnumber-1]])
    numbers.append(newnumber)

tabu列表中包含在给定编号之后禁止使用哪些编号的信息,但是由于python索引从0开始,因此存在tabu[lastnumber-1]1之后没有211之后没有232,没有2以及3之后的43,依此类推。

答案 1 :(得分:0)

您可以使用字典升级上一个示例(@Daweo),该字典将包含不允许跟在前一个数字之后的数字

... newnumber = random.choice([i for i in range(1,14+1) if i!=myfun(i)])

def myfun(i): i = str(i) abc = {'1':2 ,'2':9, '3':12...} #I'm not sure whether the keyword of the dictionary is a number, but I'm sure it will be right return abc[i] #will return the number that is associated with the key

有关更多信息,请参见https://www.tutorialspoint.com/python3/python_dictionary.htm