Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2012 02:03:27

juche-songun
Зарегистрирован: 2012-10-26
Сообщения: 42
Репутация: +  -2  -
Профиль   Отправить e-mail  

как определить конец списка!

temp = domains.pop(random.random(0,len(domains)))
хотелось бы это сделать красиво, не через
while True:
Буду благодарен за инфу .

Офлайн

#2 Ноя. 12, 2012 04:54:38

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

как определить конец списка!

рандом же не берет аргументов, и причем тут он если нужен конец

domains[-1]
не это надо?

Офлайн

#3 Ноя. 12, 2012 16:01:01

juche-songun
Зарегистрирован: 2012-10-26
Сообщения: 42
Репутация: +  -2  -
Профиль   Отправить e-mail  

как определить конец списка!

sergeek
рандом же не берет аргументов, и причем тут он если нужен конец
ты хоть знаешь что такое pop? мне надо чтоб цикл перебирал рандомно значения, а когда список станет пустым перешел дальше.

Офлайн

#4 Ноя. 12, 2012 16:13:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как определить конец списка!

Не горячитесь, на этом форуме знают, что такое pop, а Вы, судя по всему, слабо знакомы с питоном. То, чего Вы хотите выглядит странно и чужеродно.
Лично я не понимаю чего Вы хотите.



Офлайн

#5 Ноя. 12, 2012 16:22:22

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

как определить конец списка!

можно через

while domains:
попать лучше из словаря или deque, а вот это уж точно будет медленнее перемешивания:
temp = domains.pop(random.random(0,len(domains)))

Отредактировано adray (Ноя. 12, 2012 16:48:00)

Офлайн

#6 Ноя. 12, 2012 16:53:46

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

как определить конец списка!

Похоже автору нужен random.shuffle, только он не знает как об этом нам сказать.



Офлайн

#7 Ноя. 12, 2012 19:40:10

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

как определить конец списка!

ему нужен двойной оверхед - чтобы список во время итерирования без while рандомно самовыпиливался через pop:

for e in iter((lambda length: lambda :domains.pop(random.randint(0,next(length))))(reversed(range(len(domains)))),[]):
    print(e)

Офлайн

#8 Ноя. 12, 2012 20:33:18

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

как определить конец списка!

Автор не в курсе про класс сложности и не может сформулировать алгоритм.

Офлайн

#9 Ноя. 14, 2012 01:43:32

juche-songun
Зарегистрирован: 2012-10-26
Сообщения: 42
Репутация: +  -2  -
Профиль   Отправить e-mail  

как определить конец списка!

Член, как всегда не в тему.

cutwater
Похоже автору нужен random.shuffle, только он не знает как об этом нам сказать.
Увы shuffle 5 лямного списка это пи…… капец, быстрее сделать xrange, а потом seample ему сделать, а потом перебрать через for.

FishHook
Не горячитесь, на этом форуме знают, что такое pop, а Вы, судя по всему, слабо знакомы с питоном. То, чего Вы хотите выглядит странно и чужеродно.Лично я не понимаю чего Вы хотите.
Запостил поздно ночью с просоня, суть вопроса была така есть список 5 лямов надо перебрать его рандомно но хочеться красиво, а не топорно sergeek подсказал, но увы к этому моменту я понял что randit, каждый раз это будет нериально долго.

пример моего решения.
temps=sample(xrange(len(domains)))
for temp in temps:
 print domains[temp]+request

sergeek
рандом же не берет аргументов, и причем тут он если нужен конец
Кстати да, только сейчас понял о чем вы, извините за грубость.

Модератор: не забывайте следить за лексикой

Отредактировано FishHook (Ноя. 14, 2012 04:47:38)

Офлайн

#10 Ноя. 14, 2012 13:30:29

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

как определить конец списка!

Насчет быстрее:

In [11]: l = list(map(str, range(100000)))
In [12]: %timeit random.shuffle(l)
10 loops, best of 3: 144 ms per loop
In [13]: x = xrange(100000)
In [14]: %timeit random.sample(x,100000)
10 loops, best of 3: 159 ms per loop

python2, в третьем в разы медленнее почему-то

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version