Maison > Article > développement back-end > Python génère des nombres aléatoires non répétitifs et résout le problème de l'ordre de la liste
L'article suivant partagera avec vous une méthode pour générer des nombres aléatoires non répétitifs en python et réorganiser la liste. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde.
andom.sample(list, n) sélectionne au hasard n éléments différents de la liste
# -*- coding: utf-8 -*- import random # 从一个list中随机挑选5个 list = [12, 23, 13, 14, 78, 234, 123, 12345] randomlist = random.sample(list, 5) print randomlist # 在range(10)中随机生成5个不重复的数,可以作为随机下标集合,然后到list中取数 len = list.__len__() indexList = range(len) randomIndex = random.sample(indexList, 5) for i in randomIndex: print "下标为%d" % i print list[i]
pour effectuer la liste Shuffle, sort dans le désordre, random.shuffle(list), notez que la liste d'origine sera modifiée
# -*- coding: utf-8 -*- import random # 对list洗牌,在原list上做改变 list = range(10) print list random.shuffle(list) print "随机排序列表 : ", list
Concernant la génération de nombres aléatoires non répétitifs, j'étais interviewé deux fois, et un scénario de candidature était une loterie.
La solution que j'avais proposée à l'époque était : mettre le nombre aléatoire généré (indice aléatoire du tableau) dans un tableau, et à chaque fois le nombre aléatoire nouvellement généré détermine d'abord s'il existe déjà, et si c'est le cas n'existe pas, ajoutez ce tableau, et s'il existe, régénérez les nombres aléatoires jusqu'à ce que le nombre d'éléments dans ce tableau atteigne une valeur spécifique, puis transférez ce tableau d'indices aléatoires dans le tableau d'origine pour obtenir des éléments. L'intervieweur m'a demandé quelle était la complexité temporelle et j'ai répondu O(n^2). L'intervieweur m'a demandé si j'avais des plans d'amélioration, mais j'y ai réfléchi pendant un moment et je n'ai pas pu le comprendre.
De retour au dortoir, mon colocataire m'a dit : Vous pourrez échanger l'élément sélectionné et le dernier élément à chaque fois. La prochaine fois que vous générerez un nombre aléatoire, il sera parmi les premiers. n-1 éléments Générer, de sorte que vous n'ayez besoin d'échanger des éléments qu'une seule fois à chaque fois, et que vous n'ayez pas besoin d'accéder au tableau pour déterminer si l'indice actuel a été généré une fois. La complexité temporelle devient O(n), ce qui est admirable.
Java fournit la fonction list.contains(ele), qui peut déterminer directement si un élément existe dans le conteneur spécifié. Cela élimine le besoin d'écrire une double boucle, mais la complexité temporelle. est toujours C'est O(n^2)
Mais aujourd'hui, j'ai regardé l'exemple de fonction en python (en sélectionnant au hasard les points de départ) et il peut directement obtenir les résultats que je souhaite la prochaine fois, j'écrirai une fonction de loterie. et cela se fera avec une seule ligne de code.
Recommandations associées :
Comment choisir au hasard des éléments dans une liste en python
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!