В чем разница между массивом (списком), словарем и множеством в Python?

Ответ

В QA-автоматизации на Python выбор структуры данных напрямую влияет на читаемость и эффективность кода.

1. Список (list) — упорядоченная последовательность:

  • Сохраняет порядок добавления.
  • Позволяет дубликаты.
  • Использование в тестах: Хранение последовательности шагов, порядка проверок, списка ожидаемых значений.
    test_steps = ["open_browser", "navigate_to_url", "enter_credentials", "click_login"]
    expected_errors = ["Error 404", "Error 500", "Error 404"]  # Дубликаты допустимы

2. Множество (set) — неупорядоченная коллекция уникальных элементов:

  • Не гарантирует порядок.
  • Автоматически удаляет дубликаты.
  • Использование в тестах: Проверка уникальности (уникальные ID пользователей, теги), выполнение операций объединения/пересечения (сравнение групп прав).
    unique_user_ids = {12345, 67890, 12345}  # Станет {12345, 67890}
    actual_permissions = {"read", "write"}
    expected_permissions = {"read", "execute"}
    missing_perms = expected_permissions - actual_permissions  # Находит разницу

3. Словарь (dict) — неупорядоченное отображение «ключ-значение»:

  • Ключи уникальны и неизменяемы.
  • Обеспечивает быстрый доступ по ключу.
  • Использование в тестах: Хранение конфигурации (config['base_url']), представление JSON-ответов API, параметризация тестов.
    api_response = {
    "status": "success",
    "data": {"userId": 1, "username": "testUser"},
    "code": 200
    }
    # Быстрый доступ к полю ответа
    assert api_response["code"] == 200

Вывод: Используйте list для порядка, set для уникальности и операций с коллекциями, dict для структурированных данных и быстрого поиска по ключу.

Ответ 18+ 🔞

Слушай, вот сидишь ты, пишешь свои автотесты на Python, и вроде всё работает, но код выглядит как говно собачье — непонятно, медленно и читать противно. А часто вся проблема в том, что неправильную структуру данных выбрал. Давай разберём, что куда тыкать, чтобы не было мучительно больно.

1. Список (list) — это когда важен порядок, ёпта.

  • Всё лежит ровно так, как ты положил. Добавил «шаг 1», потом «шаг 2» — они так и останутся.
  • Одинаковые элементы могут повторяться, хоть десять раз.
  • Где это применить в тестах: Ну, например, записать последовательность шагов для тест-кейса или список ожидаемых ошибок, которые могут вылезти (и они могут повторяться, это нормально).
    test_steps = ["open_browser", "navigate_to_url", "enter_credentials", "click_login"]
    expected_errors = ["Error 404", "Error 500", "Error 404"]  # Да, две одинаковые ошибки — бывает же!

2. Множество (set) — это неупорядоченная куча, но вся уникальная.

  • Порядка тут нет, как карта ляжет. Забудь про индексы.
  • Все дубликаты он выкидывает нахуй автоматически. Добавил два одинаковых ID пользователя — останется один.
  • Где это применить в тестах: Идеально, когда нужно проверить уникальность. Типа, собрал все ID созданных юзеров — они должны быть разные. Или для операций: сравнить, какие права есть, а каких нет. Очень удобно.
    unique_user_ids = {12345, 67890, 12345}  # На выходе будет просто {12345, 67890}, второй сдубликат сгинет
    actual_permissions = {"read", "write"}
    expected_permissions = {"read", "execute"}
    missing_perms = expected_permissions - actual_permissions  # Вот так элементарно находим, чего не хватает

3. Словарь (dict) — это, блядь, наше всё, когда нужно «ключ — значение».

  • Ключи уникальные и их менять нельзя.
  • Работает быстро, как угорелый, если нужно найти значение по ключу.
  • Где это применить в тестах: Да везде! Конфиги тестовые хранить (config['base_url']), разбирать JSON-ответы от API (это же по сути словарь), параметры для тестов передавать. Универсальная хуйня.
    api_response = {
    "status": "success",
    "data": {"userId": 1, "username": "testUser"},
    "code": 200
    }
    # И чтобы проверить статус, не надо ничего выёбываться, просто
    assert api_response["code"] == 200

Короче, вывод, чувак: Если тебе важен порядок — бери list. Если нужна уникальность и операции с кучами — твой друг set. Ну а если работаешь со структурированными данными и надо быстро что-то найти — даже не думай, тащи dict. Выбери не ту структуру — и потом сиди, ебашься с геморройным кодом, а оно тебе надо?