如何在python中连续找到三个相同的值

时间:2019-02-05 03:22:50

标签: python data-science

假设从集合0、1、2,...,8、9中一次选择一个随机数,然后进行替换。使用10,000个模拟来估计在其中选择三个相同值所需的平均数。一排。

这是我尝试的代码:

import numpy as np

newlist = 0*[0]
ct = 0
set = [0,1,2,3,4,5,6,7,8,9]
random = np.random.choice(set, size=1)
for i in range(10000):
    if random == random:
        ct +=1
        while ct == 3:
            newlist.append()
print(random)

4 个答案:

答案 0 :(得分:2)

我认为这就是您想要做的。该代码运行测试10000次,当最后三个值相等时,我们将迭代次数附加到结果中,然后继续进行下一个循环:

import numpy as np
from collections import deque

results = []
number_selection = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for _ in range(10000):
    _iterations = 1
    d = deque(maxlen=3)

    while True:
        random_value = np.random.choice(number_selection, size=1)
        if len(d) == 3 and len(set(d)) == 1:  # if last three items added to deque were equal we add the number of iterations to results and break to next loop
            results.append(_iterations)
            break  # break the while loop

        _iterations += 1
        d.append(random_value.item())

print('Average is: {0}'.format(float(sum(results)) / max(len(results), 1)))

希望这会有所帮助!

答案 1 :(得分:0)

算法

  1. 从您的集合中生成3个随机选择的项目的窗口
  2. 初始化一个计数器,该计数器将保存等于3的项被发现的次数
  3. 在每次迭代中,将窗口向左移动并添加一个随机选择的新项目
  4. 如果窗口中的所有项目都相等,则增加计数器
  5. 重复3和4,直到完成10000个模拟

代码

if ($("#formvalidation").length) {
    $("#formvalidation").validate({
        debug:true,
        rules: {
            titulo: "required",
            funciones: "required",
            tipocontrato: "required",
            nivelexperiencia: "required",
            rangosalario: "required",
        },
        messages: {
            titulo:{
                required: "Por favor escribe un título atractivo para tu oferta.",
                minlength: "El título es demasiado pequeño. Intenta agregar más detalles para que sea atractivo.",

            },
            funciones:{
                required: "Por favor redacta brevemente las funciones a realizar del candidato.",
                minlength: "Este texto es demasiado corto. Intenta agregar más detalles.",

            },
            tipocontrato:{
                required: "Selecciona el tipo de oferta a publicar.",

            },
            nivelexperiencia:{
                required: "Selecciona la experiencia necesaria para aplicar a esta oferta.",

            },
            rangosalario:{
                required: "Selecciona el rango de salario que corresponda a tu oferta.",

            },
            estadosoferta:{
                required: "Selecciona la entidad federativa en donde está ubicada la oferta a publicar.",

            },
            municipios:{
                required: "Selecciona el municipio en donde está ubicada la oferta a publicar.",

            },
            localidades:{
                required: "Selecciona la localidad en donde se ubica la oferta a publicar.",

            },
            categorias:{
                required: "Por favor selecciona la categoría a la que pertenece la oferta a publicar.",

            },
            subcategorias:{
                required: "Por favor selecciona la subcategoria a la que pertenece la oferta a publicar.",

            },
            contratacion:{
                required: "Elige una fecha de contratación aproximada.",

            },
      },
      errorPlacement: function (label, element) {
        label.addClass('mt-2 text-danger');
        label.insertAfter(element);
      },
      highlight: function (element, errorClass) {
        $(element).parent().addClass('has-danger')
        $(element).addClass('form-control-danger')
      },
      submitHandler: function(form) {
        $("#loading").removeClass('d-none');
        form.submit();
      }
     });
    };

答案 2 :(得分:0)

怎么样:

opts = list(range(9))

# simulate once
def get_three(): 
    c = 1
    x = np.random.choice(opts, 1)
    i = 1
    while c < 3:
        x1 = np.random.choice(opts, 1)
        if x == x1:
            c += 1
        else:
            x = x1
            c = 1
        i += 1
    return i

# simulate n times
n = 10000 
result = sum([get_three() for i in range(n)]) / n
result # 90.5146

答案 3 :(得分:0)

理论上,假设您的初始列表中有n * 1/n^3个数字,则期望的期望值为1/n^2,即n。 为了模拟它,我将尝试以下操作:

import numpy as np

count = 0
num_iterations = 1000
numbers = [0,1,2,3,4,5,6,7,8,9]
for _ in range(num_iterations):
    if len(set(np.random.choice(numbers, 3, replace=True))) == 1:
        count += 1

print("Avg is {}".format(count/num_iterations))

说明:

由于numpy.choice会从numbers中统一选择三个成员,因此三个连续的相同编号的选择的情况等同于基数为1的集合。如果增加{{1} }到大约10000,您会看到它以预期的可接受的精度(平均大约为0.01)模拟情况。