Форум сайта python.su
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)
Офлайн
Если Вы планируете использовать Вашу функцию итерационно, без вопросов… Просто я выполнял разовое изъятие всех пар ключ: значение случайным образом. Если Вашу функцию использовать для такой задачи, то количество строк еще увеличится (Вам придется несколько раз ее вызывать, что не есть хорошо)…
Уберите цикл for и запустите свою программу…
Что нибуть изменилось????
Отредактировано 4kpt (Ноя. 24, 2012 17:34:54)
Офлайн
4kpt, нет не изменилось, также работает Ну теперь я понял, что в данном случае цикл for не обязательно использовать. Спасибо
Офлайн
Да не за что :) Кроме того, смотри сам. При каждом вызове функции происходит импортирование модуля random. Это конкретно жрет ресурсы… Кроме того, зачастую, повторный вызов функции работает медленнее, чем встроенные методы типов. Посему, где можно - лучше использовать встроенные методы…
Использовать for не обязательно, потому, что метод keys генерирует список существующих ключей, из которого функция choise и выбирает один случайным образом…
Отредактировано 4kpt (Ноя. 24, 2012 17:46:45)
Офлайн
При каждом вызове функцииНе жрет. Импорт происходит единожды. Я не говорю про данный случай, а вообще такая подгрузка модулей по необходимости также практикуется. Например, если эта функция в процессе работы программы может быть никогда и не вызвана пользователем, то незачем заранее тащить модуль, который может и не понадобиться.
происходит импортирование модуля
random. Это конкретно жрет
ресурсы…
Офлайн
rudmНе знаю, что вы хотите сделать, но делаете вы это очень странно. Опишите исходную задачу, может, чего лучше посоветуем.
P.S. Я не придумал ничего лучше как конвертировать в строку, извлекать значение ключа, конвертировать обратно в число и сравнивать. )
Офлайн
dimy44
Не жрет. Импорт происходит единожды. Я не говорю про данный случай, а вообще такая подгрузка модулей по необходимости также практикуется. Например, если эта функция в процессе работы программы может быть никогда и не вызвана пользователем, то незачем заранее тащить модуль, который может и не понадобиться.
Офлайн
Да, Вы правы конечно, к такому нужно подходить осторожно. Это у меня сказывается практика программирования на смартфоны, где оперативу приходится экономить)).
Офлайн
dimy44
Вы правы. Не жрет. Проверил с помощью модуля timeit. Разницы практически никакой.
Офлайн
Столкнулся с интересным поведением 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
>>>
Офлайн