Nathanial Wilson
Nathanial Wilson

Reputation: 165

Python - Grab Random Names

Alright, so I have a question. I am working on creating a script that grabs a random name from a list of provided names, and generates them in a list of 5. I know that you can use the command

items = ['names','go','here']

rand_item = items[random.randrange(len(items))]

This, if I am not mistaken, should grab one random item from the list. Though if I am wrong correct me, but my question is how would I get it to generate, say a list of 5 names, going down like below;

random
names
generated
using
code

Also is there a way to make it where if I run this 5 days in a row, it doesn't repeat the names in the same order?

I appreciate any help you can give, or any errors in my existing code.

Edit: The general use for my script will be to generate task assignments for a group of users every day, 5 days a week. What I am looking for is a way to generate these names in 5 different rotations.

I apologize for any confusion. Though some of the returned answers will be helpful.

Edit2: Alright so I think I have mostly what I want, thank you Markus Meskanen & mescalinum, I used some of the code from both of you to resolve most of this issue. I appreciate it greatly. Below is the code I am using now.

import random
items = ['items', 'go', 'in', 'this', 'string']
rand_item = random.sample(items, 5)
for item in random.sample(items, 5):
print item

Upvotes: 2

Views: 4016

Answers (4)

kennes
kennes

Reputation: 2155

random.shuffle(items) will handle the random order generation

In [15]: print items
['names', 'go', 'here']

In [16]: for item in items: print item
names
go
here

In [17]: random.shuffle(items)

In [18]: for item in items: print item
here
names
go

For completeness, I agree with the above poster on random.choice().

Upvotes: 0

fferri
fferri

Reputation: 18950

random.choice() is good for selecting on element at random.

However if you want to select multiple elements at random without repetition, you could use random.sample():

for item in random.sample(items, 5):
    print item

For the last question, you should trust the (pseudo-) random generator to not give the same sequence on two consecutive days. The random seed is initialized with current time by default, so it's unlikely to observe the same sequence on two consecutive days, altough not impossible, especially if the number of items is small.

If you absolutely need to avoid this, save the last sequence to a file, and load it before shuffling, and keep shuffling until it gives you a different order.

Upvotes: 3

arturhoo
arturhoo

Reputation: 2512

It is not clear in your question if you simply want to shuffle the items or make choose a subset. From what I've made sense you want the second case.

You can use random.sample, to get a given number of random items from a list in python. If I wanted to get 3 randomly items from a list of five letters, I would do:

>>> import random
>>> random.sample(['a', 'b', 'c', 'd', 'e'], 3)
['b', 'a', 'e']

Note that the letters are not necessarily returned in the same order - 'b' is returned before 'a', although that wasn't the case in the original list.

Regarding the second part of your question, preventing it from generating the same letters in the same order, you can append every new generated sublists in a file, retrieving this file during your script execution and generating a new sublist until it is different from every past generated sublist.

Upvotes: 0

Mahi
Mahi

Reputation: 21932

You could use random.choice() to get one item only:

items = ['names','go','here']
rand_item = random.choice(items)

Now just repeat this 5 times (a for loop!)

If you want the names just in a random order, use random.shuffle() to get a different result every time.

Upvotes: 3

Related Questions