asmsr2
asmsr2

Reputation: 91

How to randomly select a specific sequence from a list?

I have a list of hours starting from (0 is midnight).

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]

I want to generate a sequence of 3 consecutive hours randomly. Example:

[3,6]

or

[15, 18]

or

[23,2]

and so on. random.sample does not achieve what I want!

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

Any suggestions?

Upvotes: 1

Views: 130

Answers (4)

Maor Refaeli
Maor Refaeli

Reputation: 2527

You can get a random number from the array you already created hour and take the element that is 3 places afterward:

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)

This will work not only for the above hours list example but for any other list contain any other elements.

Upvotes: 0

fsschmitt
fsschmitt

Reputation: 609

Note: None of the other answers take in to consideration the possible sequence [23,0,1]

Please notice the following using itertools from 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)

This will print sequences of three values on your hours list in a circular way, which will also include on your results for example the [23,0,1].

Upvotes: 1

Taohidul Islam
Taohidul Islam

Reputation: 5414

You can try this:

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)

Upvotes: 0

kvorobiev
kvorobiev

Reputation: 5070

Doesn't exactly sure what you want, but probably

import random

s = random.randint(0, 23)

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

r
Out[14]: [16, 19]

Upvotes: 1

Related Questions