2.3.1. Get Elements#

2.3.1.1. random.choice: Get a Randomly Selected Element From a Python List#

Besides getting a random number, you can also get a random element from a Python list using random. In the code below, “stay at home” was picked randomly from a list of options.

```import random

to_do_tonight = ['stay at home', 'attend party', 'do exercise']

random.choice(to_do_tonight)
```
```'attend party'
```

2.3.1.2. random.choices: Get Weighted Random Choices From a Python List#

If you want to get a list of random elements from a specific list, use `random.choices`. This method also allows you to weigh the possibility for each value with the `weights` parameter.

In the code below, I use `random.choices` to get a list of 10 random values. 0 is two times more likely to be selected than 1 and is ten times more likely to be selected than 2.

```import random

random.choices([0, 1, 2], weights=[10, 5, 1], k=10)
```
```[0, 0, 1, 0, 0, 1, 1, 0, 0, 0]
```

2.3.1.3. random.sample: Get Multiple Random Elements from a Python List#

If you want to get n random elements from a list, use `random.sample`.

```import random

random.seed(1)
nums = [1, 2, 3, 4, 5]
random_nums = random.sample(nums, 2)
random_nums
```
```[2, 1]
```

2.3.1.4. heapq: Find n Max Values of a Python List#

If you want to extract n max values from a large Python list, using `heapq` will speed up the code.

In the code below, using heapq is more than 2 times faster than using sorting and indexing. Both methods try to find the max values of a list of 10000 items.

```import heapq
import random
from timeit import timeit

random.seed(0)
l = random.sample(range(0, 10000), 10000)

def get_n_max_sorting(l: list, n: int):
l = sorted(l, reverse=True)
return l[:n]

def get_n_max_heapq(l: list, n: int):
return heapq.nlargest(n, l)
```
```expSize = 1000
n = 100
time_sorting = timeit("get_n_max_sorting(l, n)", number=expSize,
globals=globals())
time_heapq = timeit('get_n_max_heapq(l, n)', number=expSize,
globals=globals())

ratio = round(time_sorting/time_heapq, 3)
print(f'Run {expSize} experiments. Using heapq is {ratio} times'
' faster than using sorting')
```
```Run 1000 experiments. Using heapq is 2.827 times faster than using sorting
```