Как случайным образом выбрать конкретную последовательность из списка?

1

У меня есть список часов, начиная с (0 - полночь).

hour = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]

Я хочу генерировать последовательность из трех последовательных часов случайным образом. Пример:

[3,6]

или же

[15, 18]

или же

[23,2]

и так далее. random.sample не достигает того, чего я хочу!

import random    
hourSequence = sorted(random.sample(range(1,24), 2))

Какие-либо предложения?

  • 0
    Почему вы не хотите сгенерировать случайный индекс и получить [index: index + 2]?
Теги:

4 ответа

1
Лучший ответ

Не совсем уверен, что вы хотите, но, вероятно,

import random

s = random.randint(0, 23)

r = [s, (s+3)%24]

r
Out[14]: [16, 19]
1

Примечание. Ни один из других ответов не принимает во внимание возможную последовательность [23,0,1]

Обратите внимание на следующее, используя itertools из python lib:

from itertools import islice, cycle
from random import choice

hours = list(range(24)) # List w/ 24h
hours_cycle = cycle(hours) # Transform the list in to a cycle
select_init = islice(hours_cycle, choice(hours), None) # Select a iterator on a random position

# Get the next 3 values for the iterator
select_range = []
for i in range(3):
    select_range.append(next(select_init))

print(select_range)

Это будет циклически печатать последовательности из трех значений в вашем списке hours, которые также будут включены в ваши результаты, например [23,0,1].

  • 0
    Большое спасибо за ответ. Отмеченный ответ также работает и учитывает вариант, который я хотел: Примеры: [21, 0], [22,1] и [23, 2]
0

Вы можете получить случайное число из массива вы уже создали hour и взять элемент, 3 места после:

import random

def random_sequence_endpoints(l, span):
    i = random.choice(range(len(l)))
    return [hour[i], hour[(i+span) % len(l)]]

hour = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
result = random_sequence_endpoints(hour, 3)

Это будет работать не только для приведенного выше списка часов, но и для любого другого списка, содержащего любые другие элементы.

  • 1
    Спасибо за Ваш ответ. Если i = 23, то IndexError: указатель списка выходит за пределы диапазона
  • 1
    Вы правы, я пропустил это. Отредактировал мой ответ, надеюсь, он все еще полезен
0

Вы можете попробовать следующее:

import random
hour = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
index = random.randint(0,len(hour)-2)
l = [hour[index],hour[index+3]]
print(l)
  • 0
    спасибо за Ваш ответ. Работает, но не даст двух вариантов: 1) 23-2 2) 22-1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню