首页 > 编程 > Python > 正文

详解Python中打乱列表顺序random.shuffle()的使用方法

2019-11-25 11:26:52
字体:
来源:转载
供稿:网友

之前自己一直使用random中 randint生成随机数以及使用for将列表中的数据遍历一次。

现在有个需求需要将列表的次序打乱,或者也可以这样理解:

【需求】将一个容器中的数据每次随机逐个遍历一遍。

random.shuffle()方法提供了完美的解决方案。

不会生成新的列表,只是将原列表的次序打乱

# shuffle()使用样例import randomx = [i for i in range(10)]print(x)random.shuffle(x)print(x)

源码及注释(个人翻译注释)

def shuffle(self, x, random=None):  """Shuffle list x in place, and return None.  原位打乱列表,不生成新的列表。  Optional argument random is a 0-argument  function returning a random float in [0.0, 1.0);   if it is the default None,   the standard random.random will be used. 可选参数random是一个从0到参数的函数,返回[0.0,1.0)中的随机浮点; 如果random是缺省值None,则将使用标准的random.random()。  """  if random is None:    randbelow = self._randbelow    for i in reversed(range(1, len(x))):      # pick an element in x[:i+1] with which to exchange x[i]      j = randbelow(i + 1)      x[i], x[j] = x[j], x[i]  else:    _int = int    for i in reversed(range(1, len(x))):      # pick an element in x[:i+1] with which to exchange x[i]      j = _int(random() * (i + 1))      x[i], x[j] = x[j], x[i]

random 中其他的方法

class Random(_random.Random):  ## -------------------- integer methods -------------------  def randrange(self, start, stop=None, step=1, _int=int):  def randint(self, a, b):  def _randbelow(self, n, int=int, maxsize=1 << BPF, type=type,          Method=_MethodType, BuiltinMethod=_BuiltinMethodType):  ## -------------------- sequence methods -------------------  def choice(self, seq):  def shuffle(self, x, random=None):  def sample(self, population, k):  def choices(self, population, weights=None, *, cum_weights=None, k=1):  ## -------------------- uniform distribution -------------------  def uniform(self, a, b):  ## -------------------- triangular --------------------  def triangular(self, low=0.0, high=1.0, mode=None):  ## -------------------- normal distribution --------------------  def normalvariate(self, mu, sigma):  ## -------------------- lognormal distribution --------------------  def lognormvariate(self, mu, sigma):  ## -------------------- exponential distribution --------------------  def expovariate(self, lambd):  ## -------------------- von Mises distribution --------------------  def vonmisesvariate(self, mu, kappa):  ## -------------------- gamma distribution --------------------  def gammavariate(self, alpha, beta):  ## -------------------- Gauss (faster alternative) --------------------  def gauss(self, mu, sigma):  def betavariate(self, alpha, beta):  ## -------------------- Pareto --------------------  def paretovariate(self, alpha):  ## -------------------- Weibull --------------------  def weibullvariate(self, alpha, beta):

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表