【问题标题】:to create a population of "A" and "B" alphabets with 50% frequency of each创建一组“A”和“B”字母,每个字母的频率为 50%
【发布时间】:2013-10-04 09:51:55
【问题描述】:

我正在编写此代码以生成一个 txt 文件,该文件应包含 600 个字母,仅包含 A(50%) 和 B(50%),随机分布。我该怎么做,我是编码新手,请帮忙。

q=[A, B]
popsize=500
def gen_pop(A):
      population=[]
      B=A
      while len(population)<popsize:
             random.shuffle(B)
             print A
         print B

gen_pop(q)

【问题讨论】:

  • 您希望它恰好是 A 和一半 B,还是希望每个字母以 50% 的概率独立选择(导致数量的正态分布每个)?

标签: python list random


【解决方案1】:

创建一个包含 300 个 A 和 300 个 B 的列表,并使用 random.shuffle 随机播放:

>>> from random import shuffle
>>> mylist = ['A'] * 300 + ['B'] * 300
>>> shuffle(mylist)
>>> mylist
 ['B', 'B', 'A', 'B', 'A', 'A', ... 'A', 'B', 'A']

【讨论】:

    【解决方案2】:

    最佳答案可能取决于您希望您的发行版是什么。

    如果您希望字母的一半是A,一半是B,请使用jabaldoneodo 的答案中的技术,先构建序列,然后将其随机化:

     import random
    
     result = ["A"]*300 + ["B"]*300
     random.shuffle(result)
    

    另一方面,如果您希望每个值独立于其他值被选择,有 50% 的可能性是 A,有 50% 的可能性是 B,选择前面的每个值时间会不合适。相反,您可以使用 random.choice 在列表理解中从您的字母表中进行选择:

     import random
    
     alphabet = "AB"
     result = [random.choice(alphabet) for _ in range(600)]
    

    使用这种方法,As(和Bs,就此而言)的数量将呈正态分布,平均值为 300。同样的技术也适用于较大的字母。

    【讨论】:

      【解决方案3】:

      生成一个包含 300 个 A 和 300 个 B 的数组,然后使用 algorithm 对其进行随机播放。

      【讨论】:

        猜你喜欢
        • 2022-10-08
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多