【问题标题】:How to generate effectively a random number that only contains unique digits in Python?如何有效地生成仅包含 Python 中唯一数字的随机数?
【发布时间】:2016-10-19 08:59:45
【问题描述】:
import random

def get_number(size):
  result = [random.randint(1,9)]
  digits = list(range(0,10))
  digits.remove(result[0])
  if(size > 1):
    result += random.sample(digits,size-1)
  return ''.join(map(str,result))

print(get_number(4))

我解决了这个问题,但我觉得它很笨拙。 我怎样才能更有效、更优雅地做到这一点?

【问题讨论】:

  • 取所有数字 (string.digits),随机打乱它们 (random.shuffle),切片到所需长度 (...[:size])。
  • 严格来说,对整个列表进行洗牌是不必要的工作。您不需要重新排列您不会返回的数字。 shuffle 的变体是否会产生给定大小的随机子集?

标签: python list random


【解决方案1】:

随机播放是@jonrsharpe 建议的方式:

import random

def get_number(size):
    l = [ str(i) for i in list(range(10))]
    while l[0] == '0':
        random.shuffle(l)
    return int("".join(l[:size]))

限制:

  • 是不是你要10位以上的数字,你只会得到10位数字
  • 如果第一个数字最初是 0,它可以采取一些步骤

【讨论】:

    【解决方案2】:

    只需使用随机播放:

    import string
    
    x = list(string.digits)
    random.shuffle(x)
    
    print int(str(random.choice(range(1, 10))) + "".join(x[:3]))
    

    【讨论】:

    • 这些数字(因为第一个数字的生成方法)不一定只包含唯一的数字。但这个想法很好,您只需在连接数字尾部之前从 x 中删除第一个数字。
    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 2015-12-22
    • 2012-01-06
    • 2018-05-03
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多