Настройка - У меня есть список с вложенными списками (назовем его ретранслировать наборы), который выглядит примерно так:Повторяющиеся строки в вложенных списках
relay_sets = [
[[80100, 'a']],
[[75000, 'b']],
[[64555, 'c']],
[[55000, 'd'], [44000, 'e']],
[[39000, 'f'], [2000, 'g']],
[[2000, 'h'], [999, 'i'], [999, 'j']],
[[999, 'k'], [999, 'l'], [343, 'm']]
]
Пользователь ставится в одно из множеств реле (с равномерная вероятность), а затем снова использует один из вложенных списков в подсписке с равной вероятностью. Так, например, у пользователя есть шанс 1/7 быть помещенным в [[80100, 'a']]
, но затем гарантируется использование [80100, 'a']
, тогда как у пользователя есть 1/7 вероятность быть помещенным в [[55000, 'd'], [44000, 'e']]
, а затем имеет шанс 1/2 использовать [55000, 'd']
.
Я написал сценарий, который находит вероятность использования определенного реле:
def prob_using_relay(relay, relaysets):
prob1 = 1/float(len(relaysets))
for index, item in enumerate(relaysets):
for i in item:
if relay in i:
num_relays_in_set = len(relaysets[index])
prob2 = 1/float(num_relays_in_set)
total_prob = float(prob1 * prob2)
return total_prob
print prob_using_relay(80100, relay_sets) # gives correct answer of 0.142857142857
Моя проблема, я не знаю, как объяснить дублей. Поэтому, если бы я хотел узнать, как использовать реле с пропускной способностью 999, ответ должен быть (2/3 * 1/7 + 2/3 * 1/7)
, но мой скрипт дает 1/21
. Или, если бы я хотел узнать, как использовать реле с пропускной способностью 2000, ответ должен быть (1/2 * 1/7 + 1/3 * 1/7)
вместо (1/2 * 1/7)
.
Может ли кто-нибудь помочь с изменением моей функции для учета дубликатов?
Sum ваших вероятности. Вы настраиваете его вместо этого. – simonzack
откуда приходит 'num_guards_in_set'? –
жаль, что я отредактировал свой сценарий для целей вопроса, но пропустил линию. – tiajuana6