Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2012 17:25:00

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

4kpt
Мой листинг:
http://savepic.ru/3309194.jpg

Метод popitem:
http://savepic.ru/3341965.jpg

В чем разница? может я действительно что то недопонимаю

По вашему отредактированному примеру без цикла for, повторяются случайные пары, а метод popitem, один раз выбирает случайную пару и удаляет ее из словаря, пока он не станет пустым.
http://savepic.ru/3282573.jpg

Отредактировано smoke853 (Ноя. 24, 2012 17:30:28)

Офлайн

#2 Ноя. 24, 2012 17:34:38

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

Если Вы планируете использовать Вашу функцию итерационно, без вопросов… Просто я выполнял разовое изъятие всех пар ключ: значение случайным образом. Если Вашу функцию использовать для такой задачи, то количество строк еще увеличится (Вам придется несколько раз ее вызывать, что не есть хорошо)…

Уберите цикл for и запустите свою программу…
Что нибуть изменилось????



Отредактировано 4kpt (Ноя. 24, 2012 17:34:54)

Офлайн

#3 Ноя. 24, 2012 17:41:36

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

4kpt, нет не изменилось, также работает Ну теперь я понял, что в данном случае цикл for не обязательно использовать. Спасибо

Офлайн

#4 Ноя. 24, 2012 17:45:19

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

Да не за что :) Кроме того, смотри сам. При каждом вызове функции происходит импортирование модуля random. Это конкретно жрет ресурсы… Кроме того, зачастую, повторный вызов функции работает медленнее, чем встроенные методы типов. Посему, где можно - лучше использовать встроенные методы…

Использовать for не обязательно, потому, что метод keys генерирует список существующих ключей, из которого функция choise и выбирает один случайным образом…



Отредактировано 4kpt (Ноя. 24, 2012 17:46:45)

Офлайн

#5 Ноя. 24, 2012 18:45:42

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

При каждом вызове функции
происходит импортирование модуля
random. Это конкретно жрет
ресурсы…
Не жрет. Импорт происходит единожды. Я не говорю про данный случай, а вообще такая подгрузка модулей по необходимости также практикуется. Например, если эта функция в процессе работы программы может быть никогда и не вызвана пользователем, то незачем заранее тащить модуль, который может и не понадобиться.

Офлайн

#6 Ноя. 24, 2012 18:46:30

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

rudm
P.S. Я не придумал ничего лучше как конвертировать в строку, извлекать значение ключа, конвертировать обратно в число и сравнивать. )
Не знаю, что вы хотите сделать, но делаете вы это очень странно. Опишите исходную задачу, может, чего лучше посоветуем.



Офлайн

#7 Ноя. 24, 2012 18:55:56

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

dimy44
Не жрет. Импорт происходит единожды. Я не говорю про данный случай, а вообще такая подгрузка модулей по необходимости также практикуется. Например, если эта функция в процессе работы программы может быть никогда и не вызвана пользователем, то незачем заранее тащить модуль, который может и не понадобиться.

Ну не знаю… Если вызвано то в одном, то в другом месте… Насчет “незачем заранее” есть определенные требования к оформлению кода. Как такой код читать??? И если для корректной работы программы надо Х модулей, часть из которых загрузится только в определенном случае как мне знать, какие модули нужны для корректной работы программы. Да и вообще. Подумайте сами. В этом случае, если у Вас сложная система и необходимо использование сторонних модулей Вам придется вести список всех модулей, которые Вы установили, чтобы при переносе системы в один прикрасный момент пользователю не начали сыпаться ошибки на нехватку модулей…



Офлайн

#8 Ноя. 24, 2012 19:03:49

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

Да, Вы правы конечно, к такому нужно подходить осторожно. Это у меня сказывается практика программирования на смартфоны, где оперативу приходится экономить)).

Офлайн

#9 Ноя. 24, 2012 19:08:30

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

dimy44
Вы правы. Не жрет. Проверил с помощью модуля timeit. Разницы практически никакой.



Офлайн

#10 Ноя. 25, 2012 10:20:15

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

Python 2.6.3 Не могу получить случайные значения из словаря с помощью метода popitem()

Столкнулся с интересным поведением Python в случае использования функций random.choice и random.sample
Дело в том, что у меня не все ключи состоят из одного символа, некоторые содержат произвольное количество символов.

Привожу код, для иллюстрации.

import random
some_tuple = (['abc',1], ['burdamoden',2], ['cologne',3], ['directory',4], ['eleven',5], ['flourish',6])
value_one = random.sample(some_tuple,1)
print value_one
print 'Key name is', value_one[0][0]
print 'Key value is', value_one[0][1]
Выводит
[['flourish', 6]]
>>>
Key name is flourish
Key value is 6
>>>
В то время как код
import random
some_tuple = (['abc',1], ['burdamoden',2], ['cologne',3], ['directory',4], ['eleven',5], ['flourish',6])
value_one = random.choice(some_tuple)
print value_one
print value_one[0][1]
print value_one[0][0]
Выводит
>>>
['burdamoden', 2]
Key name is b
Key value is u
>>>
То, есть, насколько я понимаю, random.sample и random.choice возвращают в первом случае массив, а во втором случае строку?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version