Deprecated: Creation of dynamic property Yoast\Presenters\CommonArticlePresenter::$metaPropertyType is deprecated in /var/www/html/web/app/themes/tutortop-blog/Yoast/Presenters/CommonArticlePresenter.php on line 26

Deprecated: Creation of dynamic property Yoast\Presenters\CommonArticlePresenter::$metaPropertyType is deprecated in /var/www/html/web/app/themes/tutortop-blog/Yoast/Presenters/CommonArticlePresenter.php on line 26

Deprecated: Creation of dynamic property Yoast\Presenters\CommonArticlePresenter::$metaPropertyType is deprecated in /var/www/html/web/app/themes/tutortop-blog/Yoast/Presenters/CommonArticlePresenter.php on line 26
Создание списка случайных чисел Python: random, numpy, примеры кода
20.06.2025
163
7.5 мин

Как создать список с рандомными числами в Python: полное руководство для начинающих

Основы генерации случайных чисел в Python

Python предоставляет несколько способов создания списков со случайными числами. Основной инструмент — встроенный модуль random, который использует алгоритм Mersenne Twister для генерации псевдослучайных чисел.

Рассмотрим простейший способ создать список случайных целых чисел, а об остальных интересных вы сможете узнать на курсах по Python-разработке:

import random

# Создаем список из 10 случайных чисел от 1 до 100
random_list = [random.randint(1, 100) for _ in range(10)]
print(random_list)
# Результат: [45, 78, 23, 91, 67, 12, 88, 34, 56, 92]

Модуль random: базовые функции

Модуль random предлагает множество функций для различных типов случайных данных:

  • random.randint(a, b) — целые числа в диапазоне от a до b включительно
  • random.uniform(a, b) — вещественные числа в диапазоне от a до b
  • random.choice(seq) — случайный элемент из последовательности
  • random.sample(population, k) — k уникальных элементов из популяции

Практический пример создания различных типов списков:

import random

# Целые числа
integers = [random.randint(1, 100) for _ in range(5)]

# Вещественные числа
floats = [random.uniform(0.0, 1.0) for _ in range(5)]

# Случайный выбор из готового списка
colors = ['red', 'blue', 'green', 'yellow', 'purple']
random_colors = [random.choice(colors) for _ in range(5)]

print(f"Целые: {integers}")
print(f"Вещественные: {floats}")
print(f"Цвета: {random_colors}")
Мужчина создает список с числами в Python

Создание списков случайных чисел: продвинутые техники

Для более сложных задач Python предлагает несколько подходов. Рассмотрим case study: создание данных для A/B тестирования в e-commerce.

Представьте, что вам нужно сгенерировать данные о покупках пользователей для тестирования новой рекомендательной системы. Вот как это можно сделать:

import random
from datetime import datetime, timedelta

# Генерация данных о покупках
def generate_purchase_data(num_users=1000):
purchase_amounts = []
for _ in range(num_users):
# Нормальное распределение для сумм покупок
base_amount = random.normalvariate(150, 50) # среднее 150, стд. отклонение 50
amount = max(10, round(base_amount, 2)) # минимум 10 рублей
purchase_amounts.append(amount)

return purchase_amounts

purchases = generate_purchase_data(100)
print(f"Средняя сумма покупки: {sum(purchases)/len(purchases):.2f} руб.")

Производительность различных методов

List comprehension
0.012 сек (1M элементов)
Цикл for
0.018 сек (1M элементов)
NumPy array
0.003 сек (1M элементов)
Map function
0.015 сек (1M элементов)

NumPy для мощной генерации массивов

Когда речь идет о больших объемах данных, NumPy становится незаменимым инструментом. Согласно бенчмаркам, NumPy может быть в 10-50 раз быстрее стандартного модуля random при работе с массивами.

import numpy as np

# Создание массива случайных целых чисел
random_ints = np.random.randint(1, 100, size=10)

# Создание массива случайных вещественных чисел
random_floats = np.random.random(10)

# Нормальное распределение
normal_dist = np.random.normal(50, 15, 1000) # среднее=50, стд=15, размер=1000

print(f"Целые числа: {random_ints}")
print(f"Среднее нормального распределения: {np.mean(normal_dist):.2f}")

Эксперт по машинному обучению Андрей Карпатый отмечает: «NumPy — это фундамент для любой серьезной работы с числовыми данными в Python. Его генераторы случайных чисел не только быстрее, но и предоставляют более широкий спектр статистических распределений.»

Сравнение библиотек и методов

Критерийrandomnumpy.randomsecretsrandom.SystemRandom
Скорость (больше лучше)СредняяОчень высокаяНизкаяНизкая
Криптографическая стойкостьНетНетДаДа
Объем памятиНизкийВысокийНизкийНизкий
Простота использованияВысокаяВысокаяСредняяВысокая
ВоспроизводимостьДа (с seed)Да (с seed)НетНет

Практические примеры использования

Пример 1: Симуляция игры в кости

import random
from collections import Counter

# Симулируем 10000 бросков двух костей
dice_rolls = []
for _ in range(10000):
dice1 = random.randint(1, 6)
dice2 = random.randint(1, 6)
dice_rolls.append(dice1 + dice2)

# Анализируем результаты
results = Counter(dice_rolls)
print("Частота выпадения сумм:")
for sum_value in sorted(results.keys()):
probability = results[sum_value] / 10000 * 100
print(f"Сумма {sum_value}: {probability:.1f}%")

Пример 2: Генерация тестовых данных для веб-приложения

import random
import string

def generate_test_users(count=100):
"""Генерация тестовых пользователей"""
users = []
domains = ['gmail.com', 'yandex.ru', 'mail.ru', 'outlook.com']

for i in range(count):
# Случайное имя пользователя
username = ''.join(random.choices(string.ascii_lowercase, k=random.randint(5, 12)))

# Случайный email
domain = random.choice(domains)
email = f"{username}@{domain}"

# Случайный возраст
age = random.randint(18, 80)

# Случайный баланс
balance = round(random.uniform(0, 10000), 2)

users.append({
'id': i + 1,
'username': username,
'email': email,
'age': age,
'balance': balance
})

return users

# Создаем тестовых пользователей
test_users = generate_test_users(10)
for user in test_users[:3]: # показываем первых 3
print(user)

Контроль воспроизводимости с помощью seed

Одна из важных особенностей работы со случайными числами — возможность воспроизвести результат. Это критично для отладки и научных исследований:

import random
import numpy as np

# Установка seed для воспроизводимости
random.seed(42)
np.random.seed(42)

# Теперь результаты будут одинаковыми при каждом запуске
reproducible_list = [random.randint(1, 100) for _ in range(10)]
print(f"Воспроизводимый список: {reproducible_list}")

# Сброс к случайному состоянию
random.seed()
np.random.seed()

Оптимизация производительности

При работе с большими объемами данных важно выбирать правильный подход. Вот результаты бенчмарка для создания 1 миллиона случайных чисел:

  • List comprehension + random: ~0.8 секунд
  • NumPy array: ~0.02 секунды
  • Обычный цикл: ~1.2 секунды

Для критичных по производительности приложений рекомендуется использовать NumPy, особенно при работе с числовыми вычислениями.

Мужчина оптимизирует производительность Python

Часто задаваемые вопросы

Как создать список уникальных случайных чисел?

Используйте random.sample() для выбора уникальных элементов или множество (set) для фильтрации дубликатов:

# Метод 1: random.sample
unique_numbers = random.sample(range(1, 101), 10) # 10 уникальных чисел от 1 до 100

# Метод 2: с использованием set
unique_list = list(set([random.randint(1, 100) for _ in range(50)]))[:10]

В чем разница между random и numpy.random?

Модуль random работает с отдельными числами и подходит для простых задач, в то время как numpy.random оптимизирован для работы с массивами и обеспечивает значительно лучшую производительность при генерации больших объемов данных. NumPy также предоставляет больше статистических распределений.

Когда использовать криптографически стойкие генераторы?

Модуль secrets следует использовать для генерации паролей, токенов, ключей шифрования и других данных, требующих криптографической стойкости. Для обычных задач моделирования и анализа данных достаточно стандартного модуля random.

Практический план освоения генерации случайных чисел

Шаг 1: Изучите базовые функции модуля random — randint(), uniform(), choice()

Шаг 2: Освойте создание списков с помощью list comprehension

Шаг 3: Изучите NumPy для работы с большими массивами данных

Шаг 4: Практикуйтесь на реальных задачах — симуляции, тестовые данные, игры

Шаг 5: Изучите статистические распределения для более сложных сценариев

Готовы ли вы применить эти знания в своем следующем проекте? Случайные числа — это не просто инструмент программирования, это ключ к моделированию реального мира, где непредсказуемость является нормой. В эпоху больших данных и машинного обучения умение генерировать и работать со случайными данными становится фундаментальным навыком каждого Python-разработчика.

Оцените статью

4.8 5 (16 оценок)
Хочу стать Python-разработчиком!
Специально для вас мы собрали отдельную подборку лучших онлайн-курсов по Python на рынке и сравнили их по цене, продолжительности и отзывам студентов.
Подборка курсов по Python