Комментарии (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())
- Избегай неопределенности: если возможно, используй списки одного типа