Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2016 19:28:18

ProPall
Зарегистрирован: 2016-10-10
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

Нужно составить программу которая будет разделять список L на две части ( не обязательно равные) B и С и обьединять их другой список D , где каждый элемент списка D имеет 50% шанс быть из списка B и 50% шанс быть из списка C.
Я застрял на моменте с 50% на 50%.

 
def shuffle(L):
listlen = int(len(L)/2)
B = L[:listlen]
C = L[listlen:]
D = []
[\code]

Отредактировано ProPall (Ноя. 17, 2016 20:19:33)

Офлайн

#2 Ноя. 17, 2016 19:56:13

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

ProPall
Что по твоему делает or?

Офлайн

#3 Ноя. 17, 2016 20:18:47

ProPall
Зарегистрирован: 2016-10-10
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

Iskatel
ProPallЧто по твоему делает or?
Да, там ошибка. Or - логический оператор который проверяет два операнда. Если хотя бы одно выражение будет истенным , то и выражение будет истенным.

Офлайн

#4 Ноя. 17, 2016 20:56:58

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

В условии подозрительно отсутствует длина результирующего списка.
И классно ты подредактировал - то хоть был намек что элементы не должны повторяться, а теперь и его нет.
ИМХО делай random.shuffle половинок, а потом выбери половину из B и половину из D и объедини.

ЗЫ. что впринципе будет аналогично тому, что сделать random.shuffle для исходного списка, и выбрать половину… зачем на 2 делить?

Отредактировано Iskatel (Ноя. 17, 2016 21:00:25)

Офлайн

#5 Ноя. 17, 2016 21:37:05

ProPall
Зарегистрирован: 2016-10-10
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

Iskatel
В условии подозрительно отсутствует длина результирующего списка. И классно ты подредактировал - то хоть был намек что элементы не должны повторяться, а теперь и его нет.ИМХО делай random.shuffle половинок, а потом выбери половину из B и половину из D и объедини.ЗЫ. что впринципе будет аналогично тому, что сделать random.shuffle для исходного списка, и выбрать половину… зачем на 2 делить?
Длина должна быть такая же как и у оригинального списка. То есть фактически код заменяет random.shuffle. Твоя идея с random.shuffle не подходит , ибо тогда каждый элемент результатирующего списка не будет иметь 50 процентый шанс быть из списка B , и 50 процентый шанс быть из списка C.

Офлайн

#6 Ноя. 17, 2016 21:47:06

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

ProPall
ибо тогда каждый элемент результатирующего списка не будет иметь 50 процентый шанс быть из списка B , и 50 процентый шанс быть из списка C.

Неповеришь…

Но пока не веришь, скажи, почему ты веришь что при shuffle первая половина исходного списка будет встречаться в результате чаще/реже второй и на сколько процентов? ))

Офлайн

#7 Ноя. 17, 2016 22:13:00

ProPall
Зарегистрирован: 2016-10-10
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

Iskatel
Если сделать как предлогаешь ты то список будет на половину состоять только из значений из списка B а вторая половина только из значений из списка C. По заданию дано, что КАЖДОЕ значение имеет шанс быть из B или быть из С.

Офлайн

#8 Ноя. 17, 2016 22:25:25

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

ProPall
Если сделать как предлогаешь ты то список будет на половину состоять только из значений из списка B а вторая половина только из значений из списка C. По заданию дано, что КАЖДОЕ значение имеет шанс быть из B или быть из С.

Ты чтото курил? В твоем сообщении то, что до слова “По” равно тому что после него…

Я тебе скажу, что на сайте есть замечательный раздел “помощь студентам”, там помогают решить задания одаренных преподов.

Раздел для новичков предлагает новичкам понять как решить жизненную задачу.

Надеюсь ты понимаешь, что это разные вещи.

Я не буду тебе рассказывать теорию вероятностей, это нудно, долго, и почитать есть где.
Обьясню “на пальцах”

Подкидываешь монетку - орел/ решка 50/50
Делаешь список из двух значений ‘орел’,'решка', делаешь ему shuffle, выбираешь первое значение - 50/50
Делаешь большой список, делаешь ему shuffle, выбираешь первую половину - 50/50.

Гдето так.

Я тут больше писать не буду, если хочешь докопаться до истины - кури ТерВер.
Если хочешь сделать “так как хочет препод” - ну так про раздел форума я тебе подсказал.

Отредактировано Iskatel (Ноя. 17, 2016 22:26:49)

Офлайн

#9 Ноя. 18, 2016 00:42:11

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

Предполагается, что выбор осуществляется без возвращения, как только в одном из списков элементы иссякнут, выбор завершается

 import random
p = 0.5   #  Можно поставить другое значение, например 0.3, тогда с вер. 0.3 будет выбор из C и 0.7  из B
C = [1,2,3]
B = [5,6,7,8]
D = []
while C and B:
    if random.random() < p:
         D.append(C.pop())
    else:
         D.append(B.pop())

Офлайн

#10 Ноя. 18, 2016 19:13:08

D.O
Зарегистрирован: 2016-11-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Cобрать из двух списков один

scidam
Предполагается, что выбор осуществляется без возвращения, как только в одном из списков элементы иссякнут, выбор завершается
Возникли вопросы
1.Как список L ,разделён на C и B.
2. Как работает в этом случае оператор if

Отредактировано D.O (Ноя. 18, 2016 19:13:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version