Python: как составить список n чисел и произвольно выбрать любой номер?
Я подсчитал что-то, и он вышел на N
Теперь я хотел бы иметь список, содержащий от 0 до N чисел в нем.
Пример:
N = 5
затем count_list = [1, 2, 3, 4, 5]
Как я могу это сделать?
Кроме того, как только я создал список,
Я хотел бы случайным образом выбрать номер из этого списка и использовать его.
После этого я хотел бы выбрать другой номер из оставшихся номеров списка (N-1), а затем использовать его также.
Это продолжается, список пуст.
может кто-то, пожалуйста, помогите мне с этим?
Благодаря
Ответы
Ответ 1
Вы можете создать перечисление элементов примерно так:
mylist = list(xrange(10))
то вы можете использовать функцию random.choice
, чтобы выбрать свои элементы:
import random
...
random.choice(mylist)
EDIT:
Как правильно заявил Асим Ихсан, мой ответ еще не затрагивает полную проблему ОП. Чтобы удалить значения из списка, можно просто вызвать list.remove()
:
import random
...
value = random.choice(mylist)
mylist.remove(value)
Ответ 2
Вы можете попробовать этот код
import random
N = 5
count_list = range(1,N+1)
random.shuffle(count_list)
while count_list:
value = count_list.pop()
# do whatever you want with 'value'
Ответ 3
Что касается первой части:
>>> N = 5
>>> count_list = [i+1 for i in xrange(N)]
>>> count_list
[1, 2, 3, 4, 5]
>>>
Что касается второго, прочитайте следующее:
http://docs.python.org/library/random.html
>>> from random import choice
>>> a = choice(count_list)
>>> a
1
>>> count_list.remove(a)
>>> count_list
[2, 3, 4, 5]
Это общая идея.
Кстати, вам также может быть интересно прочитать это:
http://code.activestate.com/recipes/59883-random-selection-of-elements-in-a-list-with-no-rep/
Существует несколько реализаций быстрого случайного выбора.
Ответ 4
Вам не нужно подсчитывать материал, если вы хотите выбрать случайный элемент. Просто используйте random.choice()
и передайте свой следующий:
import random
items = ['foo', 'bar', 'baz']
print random.choice(items)
Если вам действительно нужно их подсчитать, используйте random.randint(1, count+1)
.
Ответ 5
Вы можете использовать:
import random
random.choice(range(n))
или
random.choice(range(1,n+1))
если вы хотите от 1
до n
, а не от 0
.
Ответ 6
После этого я хотел бы выбрать другой номер из оставшихся номеров списка (N-1), а затем использовать его также.
Тогда вы, вероятно, не хотите создавать список чисел от 1 до N только для того, чтобы выбрать один (почему бы просто не запросить случайное число в этом диапазоне напрямую, а не явно создавать его на выбор?), а вместо этого перетасовать такой список. К счастью, модуль random
вы тоже задумали: просто используйте random.shuffle
.
Конечно, если у вас есть огромный список чисел, и вы только хотите нарисовать несколько, то, безусловно, имеет смысл рисовать каждый с помощью random.choice
и удалять его.
Но... почему вы хотите выбирать числа из диапазона, что соответствует количеству некоторых элементов? Вы собираетесь использовать номер, чтобы выбрать один из элементов? Не делай этого; что уходит с вашего пути, чтобы сделать вещи слишком сложными. Если вы хотите выбрать один из элементов, сделайте это прямо - снова с помощью random.choice
.
Ответ 7
Создайте список (отредактированный):
count_list = range(1, N+1)
Выберите случайный элемент:
import random
random.choice(count_list)
Ответ 8
maitain a set
и удалите случайно выбранный элемент (с choice
) до тех пор, пока список не будет пуст.
s=set(range(1,6))
import random
while len(s)>0:
s.remove(random.choice(list(s)))
print(s)
Три пробега дают три разных отрезка
>>>
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>>
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])
>>>
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])