【问题标题】:New Function.... Not working randomly enough新功能....不够随机
【发布时间】:2017-04-08 05:01:50
【问题描述】:
import random

####################
def ListRearrange(listx):
    listz = listx[:]
     x = len(listx)
     for y in range(x):
               a = random.choice(range(x))
               b = listx.pop(a)
               listx.append(b)

     return listx
####################
list1 = ["Hello", 5000, "60", "Timmothy", 400, "2", "Okay"]
print list1
for g in (1,2,3,4,5,6,7,8,9):         
     p = ListRearrange(list1)
     print p

感谢看到这个的人。我想做的是创建一个随机混乱的列表。但是,当我运行它时,它似乎一点也不随机。有可能我忽略了某些东西,或者那是随机的。有机会请回复我。

【问题讨论】:

    标签: python list function random


    【解决方案1】:

    你的洗牌不公平。它将列表中的随机项移动到列表末尾的次数与列表中的项相同,但这意味着第一项仅略小于 1 - ((n - 1) / n)n 被移动的机会,在公平的洗牌中,它将有 (n - 1) / n 被移动的机会。对于包含 7 个元素的列表,第一个元素停留在同一个位置的几率约为 34%,而在公平洗牌中的几率约为 14%。

    使用简单、标准的随机播放,例如 Fisher–Yates

    def ListRearrange(l):
        result = l[:]
    
        for i in range(len(l) - 1):
            swap = random.randrange(i, len(l))
            result[i], result[swap] = result[swap], result[i]
    
        return result
    

    或者内置的random.shuffle

    【讨论】:

    • 陛下,我是个白痴。 random.shuffle 哇。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2012-03-11
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多