случайным образом производить дублированные элементы

Если вам нужно другое поведение, когда вы имеете дело со значением типа, вам, очевидно, потребуется выполнить какой-то тест. Вам не нужна явная проверка для значений значений в коробке , так как все типы значений будут помещены в бокс ** из-за параметра, который вводится как object.

Это код должен соответствовать вашим заявленным критериям: Если value является типом (в штучной упаковке), то вызовите полиморфный метод Equals, в противном случае используйте == для проверки ссылочного равенства.

public void SetValue(TEnum property, object value)
{
    bool equal = ((value != null) && value.GetType().IsValueType)
                     ? value.Equals(_properties[property])
                     : (value == _properties[property]);

    if (!equal)
    {
        // Only come here when the new value is different.
    }
}

( ** И, да, я знаю, что Nullable<T> является ценностным типом со своими собственными специальными правилами, касающимися бокса и распаковки, но здесь это почти не имеет значения.)

2
задан Mureinik 20 March 2019 в 09:12
поделиться

3 ответа

То, что вы ищете, это random.choices - Новое в Python версии 3.6 . - определение функции ниже; и вы можете прочитать больше здесь .

random.choices(population, weights=None, *, cum_weights=None, k=1)

Вы можете назначить weights для того, чтобы дать определенному элементу приоритет над другими. - Хотя я полагаю, что приведенный ниже пример удовлетворит ваши потребности.

Пример

import random

random.choices([1, 2, 3, 4], k=4)

Альтернативно в старых версиях Python вы можете использовать random.choice, как показано ниже; хотя он просто поддерживает один аргумент, последовательность.

Пример

import random

population = [1, 2, 3, 4, 5]

def choices(population, k=1):
    return [random.choice(population) for _ in range(k)] if k > 1 else random.choice(population)

choices(population, k=5)

Выход

[2, 4, 2, 5, 1]
0
ответ дан Julian Camilleri 20 March 2019 в 09:12
поделиться

Вы можете использовать numpy.random.choice

import numpy as np

x = [10, 20, 30, 40, 50]

print(np.random.choice(x, 4, replace=True))

Вывод:

[50 50 30 30] 
0
ответ дан AkshayNevrekar 20 March 2019 в 09:12
поделиться

sample - неправильный инструмент, как вы видели. Вместо этого вы можете использовать choices :

choices([10, 20, 30, 40, 50], k=4)     
0
ответ дан Mureinik 20 March 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: