0
Вопрос про списки. Python.
Возможно ли вернуть из списка случайный элемент не импортируя модуль random?
24 odpowiedzi
+ 3
Вот накалякал пример. Своего рода это костыль, но как вариант
https://code.sololearn.com/cnX3HdKAcBJL/?ref=app
+ 4
😎_M_😎 Напишите тут, если вам ответят там
+ 2
😎_M_😎 Потому что с числами это не работает. И вообще лучше использовать рандом, не вижу причин его не использовать. Ну или если этот вопрос был задан чисто для интереса, без целей практического применения, то ладно.
+ 2
😎_M_😎 это, увы не могу сказать. Надо узнать, какой работает set(). Надо спросить у какого-нибудь сеньора. Задайте вопрос на Хабр Q A
+ 2
Valerii Mamontov ну и впринципе очевидно, сервера у сололерн тоже на linux
+ 1
Павел Рысев, спасибо, вот кстати ваш вариант, но тот что хотел я
https://code.sololearn.com/c1JlkUAqcIFG/?ref=app
+ 1
Valerii Mamontov понял о чем вы.
+ 1
Valerii Mamontov прикол в том что при set списка чисел у вас все вемя итоговый список будет один и тот же. С буквами не так.
+ 1
Valerii Mamontov я проверил код запуская код через системный интерпретатор python в linux. Результат - все время разное
+ 1
Valerii Mamontov у меня 3.9.1. Хз совсем, от чего так
0
Павел Рысев, а почёму это костыль? что не так?
0
Просто Павел, я проверил, с числами действительно не работает, но почему?
0
Просто Павел, 😎_M_😎
Когда вы преобразуете список во "множество" (set(a)), то повторяющиеся элементы списка "схлопываются". Остаются только уникальные элементы, независимо число это или строки.
a = [1, 4, 1, 3, 4]
print(set(a))
# (1, 3, 4)
В момент преобразования происходит сортировка элементов в случайном порядке. Например:
s = "hello world"
my_set = set(s)
print(my_set)
# {'o', 'd', 'h', 'l', ' ', 'r', 'w', 'e'}
При первом приближении кажется, что в ходе преобразования списка из чисел во множество происходит сортировка и числа упорядочиваются. 1, 3, 4...
На самом деле это случайность. Если взять большой список из 10-15 чисел, то вы увидите, что нет никакой сортировки.
big_list = [1, 4, 1, 3, 49, 20, 22, 2, 12, 1, 34, 234, 45, 21, 45, 2, 1, 56, 34]
print(set(big_list))
#{1, 2, 3, 4, 34, 234, 12, 45, 49, 20, 21, 22, 56}
0
Просто Павел нет, с буквами он тоже будет всегда одинаковым
0
Просто Павел не важно из каких элементов состоит список, из чисел или из строк - print(set(big_list)) всегда будет выдавать одинаковый результат
>>> big_list = ["1", "4", "1", "3", "49", "20", "22", "2", "12", "234", "45", "21", "45", "2", "1", "56", "34", "a", "bbnh", "a"]
>>> print(set(big_list))
{'3', '4', '234', '56', '34', '1', 'bbnh', 'a', '20', '12', '45', '22', '49', '2', '21'}
>>> print(set(big_list))
{'3', '4', '234', '56', '34', '1', 'bbnh', 'a', '20', '12', '45', '22', '49', '2', '21'}
>>> print(set(big_list))
{'3', '4', '234', '56', '34', '1', 'bbnh', 'a', '20', '12', '45', '22', '49', '2', '21'}
>>> print(set(big_list))
скорей всего в методе set происходит следующее:
1. удаляются повторяющиеся элементы
2.создаётся новый список (множество)
3.при создании (для вывода чисел в случайном порядке) используется random
то есть генерирование случайного порядка - это псевдогенерация
поэтому случайный порядок чисел всегда получается одинаковым
Погуглите "random.seed python"
0
Просто Павел и тут ещё такой момент:
если повторять код в сололерн - один результат
а если на компе, то другой
0
Просто Павел думаю, тут всё дело в площадке. Код в сололерне всегда выполняется на сервере. И при каждом запуске он запускает ... скажем так "новый интерпретатор", каждый раз он новый.
Код на компе запускает всегда один и тот же интерпретатор (процессор или процесс).
0
Просто Павел я конечно сильно упрощаю, но тут главное донести мысль.
0
Просто Павел запустите Ваш код на компе и Вы сильно удивитесь.