← Назад к вопросам

Какие значения можно положить в массив?

1.0 Junior🔥 191 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Универсальность списков в Python

В Python список (list) — это контейнер, который может содержать объекты любых типов. Это отличает Python от типизированных массивов в других языках (например, Java или C++).

Примитивные типы

В списки можно помещать основные типы данных:

# Целые числа
integers = [1, 2, 3, -5, 0]

# Числа с плавающей точкой
floats = [1.5, 3.14, -2.71, 0.0]

# Строки
strings = ["hello", "world", "Python"]

# Логические значения
booleans = [True, False, True]

# None (отсутствие значения)
with_none = [1, None, "text", None]

# Комплексные числа
complex_nums = [1+2j, 3-4j]

Смешанные типы в одном списке

Это уникальная особенность Python — в одном списке могут быть элементы разных типов:

mixed = [
    42,           # int
    3.14,         # float
    "text",       # str
    True,         # bool
    None,         # NoneType
    1+2j          # complex
]

for item in mixed:
    print(type(item), item)
# <class 'int'> 42
# <class 'float'> 3.14
# <class 'str'> text
# <class 'bool'> True
# <class 'NoneType'> None
# <class 'complex'> (1+2j)

Коллекции

В списки можно помещать другие коллекции:

# Вложенные списки (матрица)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# Кортежи
with_tuples = [(1, 2), (3, 4), ("a", "b")]

# Словари
users = [
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25}
]

# Множества
with_sets = [{1, 2, 3}, {4, 5, 6}]

# Функции как элементы
functions = [len, str.upper, int]
for func in functions:
    print(func.__name__)

Объекты пользовательских классов

В список можно помещать экземпляры любых классов:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f"Person({self.name}, {self.age})"

people = [
    Person("Alice", 30),
    Person("Bob", 25),
    Person("Charlie", 35)
]

for person in people:
    print(person.name, person.age)

Функции и лямбды

Функции — это первоклассные объекты в Python, поэтому их можно хранить в списках:

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

operations = [add, multiply, lambda x, y: x - y]

# Вызов функций из списка
print(operations[0](5, 3))  # 8
print(operations[1](5, 3))  # 15
print(operations[2](5, 3))  # 2

Файловые объекты

# Открытые файлы
files = []
with open("file1.txt") as f1:
    with open("file2.txt") as f2:
        files = [f1, f2]
        # Работа с файлами

Генераторы и итераторы

def gen():
    yield 1
    yield 2
    yield 3

# Сам генератор можно поместить в список
gens = [gen(), gen()]

# Или итераторы
iterators = [iter([1, 2, 3]), iter("abc")]

NumPy и другие библиотеки

В списки можно помещать объекты из других библиотек:

import numpy as np
from datetime import datetime

mixed_objects = [
    np.array([1, 2, 3]),
    datetime.now(),
    {"key": "value"},
    lambda x: x ** 2
]

Практические примеры

Гетерогенные структуры данных

# Запись в БД: ID, имя, возраст, дата создания, флаг активности
user_record = [
    12345,                    # int (ID)
    "Alice",                  # str (имя)
    30,                       # int (возраст)
    datetime.now(),           # datetime объект
    True,                     # bool (активен)
    {"role": "admin"}         # dict (доп. данные)
]

Обработка разных типов

data = [1, "hello", 3.14, None, [1, 2, 3]]

for item in data:
    if isinstance(item, int):
        print(f"Integer: {item}")
    elif isinstance(item, str):
        print(f"String: {item}")
    elif isinstance(item, list):
        print(f"Nested list: {item}")
    elif item is None:
        print("None value")

Ограничения в других языках

Это контрастирует с типизированными языками:

# Python — всегда работает
py_list = [1, "text", 3.14, None]

# Java требует явного типа
// Object[] array = {1, "text", 3.14}; // можно через Object
// int[] array = {1, 2, 3}; // только int

# C++ требует шаблона
// std::vector<int> v = {1, 2, 3}; // только int
// std::vector<std::variant<int, string>> v; // сложнее

Хорошие практики

  • Документируй типы: используй type hints для ясности
from typing import List, Union

def process_data(data: List[Union[int, str]]) -> None:
    pass
  • Проверяй типы: когда необходимо знать тип
for item in mixed_list:
    if isinstance(item, str):
        print(item.upper())
  • Избегай неопределенности: если возможно, используй списки одного типа
Какие значения можно положить в массив? | PrepBro