Списки — это не просто хранилище данных. У них есть встроенные действия (методы), которые позволяют добавлять, удалять и изменять элементы.
🎯 Что такое методы?
Метод — это действие, которое может выполнить объект.
Синтаксис:
объект.метод()
Например:
my_list.append(5) # Вызываем метод append у списка my_list
➕ append() - добавить в конец
Самый частый метод! Добавляет элемент в КОНЕЦ списка:
hand = ["🐲 Дракон", "🧙 Маг"]
print(hand) # ['🐲 Дракон', '🧙 Маг']
hand.append("⚔️ Рыцарь")
print(hand) # ['🐲 Дракон', '🧙 Маг', '⚔️ Рыцарь']
Где использовать:
- Раздача карт в руку
- Добавление нового игрока
- Сбор очков
Пример: раздача карт
import random
creatures = [
{"name": "🐲 Дракон", "attack": 8},
{"name": "🧙 Маг", "attack": 6},
{"name": "⚔️ Рыцарь", "attack": 5}
]
player_hand = []
# Раздаем 3 карты
for i in range(3):
card = random.choice(creatures)
player_hand.append(card)
print(f"Получена карта: {card['name']}")
print(f"\nВсего карт в руке: {len(player_hand)}")
❌ remove() - удалить элемент по значению
Удаляет ПЕРВОЕ вхождение указанного значения:
inventory = ["Меч", "Щит", "Зелье", "Меч"]
print(inventory) # ['Меч', 'Щит', 'Зелье', 'Меч']
inventory.remove("Меч") # Удалит ПЕРВЫЙ меч
print(inventory) # ['Щит', 'Зелье', 'Меч']
⚠️ Важно: Если элемента нет в списке — будет ошибка!
items = ["Меч", "Щит"]
items.remove("Лук") # ❌ ValueError: 'Лук' not in list
Безопасный вариант:
items = ["Меч", "Щит"]
if "Лук" in items:
items.remove("Лук")
else:
print("Лука нет в инвентаре")
Пример: удаление погибшей карты
enemy_hand = [
{"name": "🐲 Дракон", "health": 12},
{"name": "🧙 Маг", "health": 0}, # Погиб!
{"name": "⚔️ Рыцарь", "health": 10}
]
for card in enemy_hand:
if card["health"] <= 0:
print(f"💀 {card['name']} повержен!")
enemy_hand.remove(card)
break # Важно! Нельзя изменять список во время перебора
print(f"У врага осталось карт: {len(enemy_hand)}")
🎯 pop() - извлечь и удалить
Удаляет элемент ПО ИНДЕКСУ и ВОЗВРАЩАЕТ его:
cards = ["🐲 Дракон", "🧙 Маг", "⚔️ Рыцарь"]
# Взять последнюю карту
last_card = cards.pop()
print(f"Взял: {last_card}") # ⚔️ Рыцарь
print(cards) # ['🐲 Дракон', '🧙 Маг']
# Взять первую карту
first_card = cards.pop(0)
print(f"Взял: {first_card}") # 🐲 Дракон
print(cards) # ['🧙 Маг']
Без аргумента — удаляет последний элемент
С индексом — удаляет элемент с этим индексом
Пример: ход игрока
player_hand = [
{"name": "🐲 Дракон", "attack": 8},
{"name": "🧙 Маг", "attack": 6},
{"name": "⚔️ Рыцарь", "attack": 5}
]
print("Твоя рука:")
for i, card in enumerate(player_hand):
print(f"{i+1}. {card['name']}")
choice = int(input("\nВыбери карту (1-3): "))
selected_card = player_hand.pop(choice - 1)
print(f"\n⚔️ Ты сыграл: {selected_card['name']}")
print(f"Осталось карт: {len(player_hand)}")
🔍 Проверка наличия: in
Перед удалением или поиском — проверь есть ли элемент:
inventory = ["Меч", "Щит", "Зелье"]
if "Меч" in inventory:
print("✅ У тебя есть меч!")
else:
print("❌ Меча нет")
if "Лук" not in inventory:
print("У тебя нет лука")
📏 len() - количество элементов
Узнать сколько элементов в списке:
hand = ["🐲 Дракон", "🧙 Маг", "⚔️ Рыцарь"]
print(f"Карт в руке: {len(hand)}") # 3
if len(hand) == 0:
print("Рука пуста!")
Проверка пустоты:
if len(hand) > 0:
print("Есть карты")
# Или короче:
if hand: # Пустой список = False
print("Есть карты")
🔄 clear() - очистить список
Удаляет ВСЕ элементы:
hand = ["🐲 Дракон", "🧙 Маг", "⚔️ Рыцарь"]
print(hand) # ['🐲 Дракон', '🧙 Маг', '⚔️ Рыцарь']
hand.clear()
print(hand) # []
print(f"Карт осталось: {len(hand)}") # 0
📊 Таблица методов
| Метод | Что делает | Пример |
|---|---|---|
.append(x) |
Добавить в конец | hand.append("Меч") |
.remove(x) |
Удалить по значению | hand.remove("Меч") |
.pop() |
Удалить последний и вернуть | card = hand.pop() |
.pop(i) |
Удалить по индексу | card = hand.pop(0) |
.clear() |
Очистить список | hand.clear() |
len(список) |
Количество элементов | len(hand) |
x in список |
Проверка наличия | "Меч" in hand |
💪 Практические примеры
Пример 1: Инвентарь
inventory = []
# Добавляем предметы
inventory.append("Меч")
inventory.append("Щит")
inventory.append("Зелье")
print(f"Инвентарь: {inventory}")
# Используем зелье
if "Зелье" in inventory:
inventory.remove("Зелье")
print("💊 Использовано зелье!")
print(f"Осталось: {inventory}")
Пример 2: Очередь действий
actions_queue = ["атака", "защита", "лечение", "мощная_атака"]
while len(actions_queue) > 0:
current_action = actions_queue.pop(0) # Берем первое
print(f"⚔️ Выполняю: {current_action}")
print("Все действия выполнены!")
Пример 3: Колода карт
deck = [
{"name": "🐲 Дракон", "attack": 8},
{"name": "🧙 Маг", "attack": 6},
{"name": "⚔️ Рыцарь", "attack": 5},
{"name": "🧚 Фея", "attack": 3}
]
hand = []
# Берем 2 карты из колоды в руку
for i in range(2):
card = deck.pop(0) # Берем первую карту из колоды
hand.append(card) # Добавляем в руку
print(f"Взял карту: {card['name']}")
print(f"\nКарт в колоде: {len(deck)}")
print(f"Карт в руке: {len(hand)}")
⚠️ Важные моменты
1. Нельзя изменять список во время его перебора
# ❌ ОШИБКА!
items = ["A", "B", "C", "D"]
for item in items:
if item == "B":
items.remove(item) # Может пропустить элементы!
# ✅ ПРАВИЛЬНО: используй список копию или break
items = ["A", "B", "C", "D"]
for item in items[:]: # [:] создает копию
if item == "B":
items.remove(item)
2. remove() vs pop()
# remove() - удаляет по ЗНАЧЕНИЮ
hand = ["Меч", "Щит", "Зелье"]
hand.remove("Щит") # Удалил "Щит"
# pop() - удаляет по ИНДЕКСУ
hand = ["Меч", "Щит", "Зелье"]
hand.pop(1) # Удалил элемент с индексом 1 (тоже "Щит")
3. Методы изменяют сам список
numbers = [1, 2, 3]
numbers.append(4) # Изменили numbers напрямую
print(numbers) # [1, 2, 3, 4]
# Методы НЕ возвращают новый список (кроме pop)
result = numbers.append(5)
print(result) # None
🎯 Итог
Основные методы:
- ✅ .append(x) — добавить элемент
- ✅ .remove(x) — удалить по значению
- ✅ .pop() — взять и удалить
- ✅ .clear() — очистить весь список
- ✅ len(список) — узнать размер
- ✅ x in список — проверить наличие
Запомни:
- Методы вызываются через точку: список.метод()
- append добавляет в конец
- remove удаляет по значению (первое вхождение)
- pop удаляет по индексу и возвращает элемент
- Проверяй наличие перед удалением!
- len() для проверки размера списка
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!