Начиная с Python 3.6, в стандартной библиотеке Python есть решение random.choices
.
Пример использования: давайте настроим популяцию и весы, соответствующие тем, которые находятся в Вопрос OP:
>>> from random import choices
>>> population = [1, 2, 3, 4, 5, 6]
>>> weights = [0.1, 0.05, 0.05, 0.2, 0.4, 0.2]
Теперь choices(population, weights)
генерирует один образец:
>>> choices(population, weights)
4
Необязательный аргумент ключевого слова k
позволяет запрашивать более одного образца в один раз. Это ценно, потому что есть некоторая подготовительная работа, которую random.choices
должен делать каждый раз, когда она вызывается, до создания каких-либо образцов; создавая сразу несколько образцов, нам нужно только сделать эту подготовительную работу один раз. Здесь мы создаем миллион выборок и используем collections.Counter
, чтобы проверить, что распределение, которое мы получаем, грубо совпадает с весами, которые мы дали.
>>> million_samples = choices(population, weights, k=10**6)
>>> from collections import Counter
>>> Counter(million_samples)
Counter({5: 399616, 6: 200387, 4: 200117, 1: 99636, 3: 50219, 2: 50025})
jQuery просто обертывает стандарт resize
событие DOM, например,
window.onresize = function(event) {
...
};
, jQuery может делать некоторую работу, чтобы гарантировать, что изменять размеры событие последовательно запускается во всех браузерах, но я не уверен, отличается ли какой-либо из браузеров, но я поощрил бы Вас тестировать в Firefox, Safari и IE.
Следующее сообщение в блоге может быть полезно для Вас: Фиксация окна изменяет размеры события в IE
, Это предоставляет этот код:
Sys.Application.add_load(function(sender, args) { $addHandler(window, 'resize', window_resize); }); var resizeTimeoutId; function window_resize(e) { window.clearTimeout(resizeTimeoutId); resizeTimeoutId = window.setTimeout('doResizeCode();', 10); }
Спасибо за ссылку на мое сообщение в блоге на http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html .
Хотя вы можете просто подключиться к стандартному событию изменения размера окна, вы обнаружите, что в IE событие запускается один раз для каждого X и один раз для каждого перемещения оси Y, в результате чего запускается тонна событий, которые может повлиять на производительность вашего сайта, если рендеринг является интенсивной задачей.
Мой метод включает короткий тайм-аут, который отменяется при последующих событиях, чтобы событие не попало в ваш код, пока пользователь не закончит изменение размера окно.
Никогда не отменяйте функцию window.onresize.
Вместо этого создайте функцию для добавления прослушивателя событий к объекту или элементу. Это проверяет и в случае, если слушатели не работают, а затем отменяет функцию объекта в крайнем случае. Это предпочтительный метод, используемый в таких библиотеках, как jQuery.
объект
: элемент или окно, объект
тип
: изменение размера, прокрутка (тип события)
обратный вызов
: ссылка на функцию
var addEvent = function(object, type, callback) {
if (object == null || typeof(object) == 'undefined') return;
if (object.addEventListener) {
object.addEventListener(type, callback, false);
} else if (object.attachEvent) {
object.attachEvent("on" + type, callback);
} else {
object["on"+type] = callback;
}
};
Затем использование выглядит следующим образом:
addEvent(window, "resize", function_reference);
или с анонимной функцией:
addEvent(window, "resize", function(event) {
console.log('resized');
});