4. Перебор элементов строки
На предыдущем уроке мы узнали, что цикл for можно использовать для перебора элементов множества. Таким же образом можно использовать цикл for, чтобы перебрать все буквы в слове:
Но, так как символы в строке пронумерованы, у нас есть еще один способ перебрать все элементы в строке: перебрать все индексы, используя уже знакомую нам конструкцию for i in range(...).
На предыдущем уроке мы узнали, что цикл for можно использовать для перебора элементов множества. Таким же образом можно использовать цикл for, чтобы перебрать все буквы в слове:
text = 'hello, my dear friends!'
vowels = 0
for letter in text:
if letter in {'a', 'e', 'i', 'o', 'u', 'y'}:
vowels += 1
print(vowels)
Но, так как символы в строке пронумерованы, у нас есть еще один способ перебрать все элементы в строке: перебрать все индексы, используя уже знакомую нам конструкцию for i in range(...).
text = 'hello, my dear friends!'
vowels = 0
for i in range(len(text)):
if text[i] in 'aeiouy':
vowels += 1
print(vowels)
1. Работа со строками (повторение)
Рассмотрим еще одну задачу. Билет называют счастливым по-питерски, если сумма цифр его номера, стоящих на четных местах, равна сумме цифр, стоящих на нечетных местах. Нам необходимо написать программу, которая определяет, является ли билет счастливым по-питерски.
Если рассматривать номер билета как строку из цифр, задача сводится к подсчету суммы цифр, стоящих на позициях 0, 2, 4..., и суммы цифр, стоящих на позициях 1, 3, 5... Чтобы перебрать элементы, мы можем воспользоваться конструкцией for i in range(...), указав шаг 2. Тогда соответствующий фрагмент программы может выглядеть следующим образом:
Можно так же записать с помощью одного цикла:
Рассмотрим еще одну задачу. Билет называют счастливым по-питерски, если сумма цифр его номера, стоящих на четных местах, равна сумме цифр, стоящих на нечетных местах. Нам необходимо написать программу, которая определяет, является ли билет счастливым по-питерски.
Если рассматривать номер билета как строку из цифр, задача сводится к подсчету суммы цифр, стоящих на позициях 0, 2, 4..., и суммы цифр, стоящих на позициях 1, 3, 5... Чтобы перебрать элементы, мы можем воспользоваться конструкцией for i in range(...), указав шаг 2. Тогда соответствующий фрагмент программы может выглядеть следующим образом:
number = input()
odd = even = 0
for i in range(0, len(number), 2):
odd += int(number[i])
for i in range(1, len(number), 2):
even += int(number[i])
if odd == even:
print('Счастливый по-питерски!')
Можно так же записать с помощью одного цикла:
number = input()
odd = even = 0
for i, digit in enumerate(number):
if i % 2 == 0: # Индекс чётный, цифра нечётная по условию задачи
odd += int(digit)
else: # Индекс нечётный, цифра чётная
even += int(digit)
if odd == even:
print('Счастливый по-питерски!')
Для того, чтобы создать пустой список, можно воспользоваться конструкцией [] или функцией list.
empt1 = [] # это пустой список
empt2 = list() # и это тоже пустой список
Добавление элемента в список
Добавление элемента в конец списка делается при помощи метода append (этот метод аналогичен методу add, используемому для добавления элементов в множество):
Добавление элемента в конец списка делается при помощи метода append (этот метод аналогичен методу add, используемому для добавления элементов в множество):
primes.append(13)
primes.append(15) # ой, ошиблись — 15 составное число!
Python
Добавление элемента в список Добавление элемента в конец списка делается при помощи метода append (этот метод аналогичен методу add, используемому для добавления элементов в множество): primes.append(13) primes.append(15) # ой, ошиблись — 15 составное число!
можно добавлять по одному элементу за раз к концу списка, для более чем одного используется метод extend
Кроме того, вы можете расширить имеющийся список любым итерабельным (перечисляемым) объектом с помощью метода extend:
Кроме того, вы можете расширить имеющийся список любым итерабельным (перечисляемым) объектом с помощью метода extend:
my_list = [1, 2, 3]
another_list = [4, 5, 6]
my_list.extend(another_list)
print(my_list)
[1, 2, 3, 4, 5, 6]
list1 = [3, 4, 1, 8, 0] # Исходный список
n = len(list1) # Определяем длину списка
for i in range(n): # Внешний цикл: выполняется n раз (по числу элементов в списке)
for j in range(1, n - i): # Внутренний цикл: проходит по неотсортированной части списка
if list1[j - 1] > list1[j]: # Если текущий элемент больше следующего:
list1[j - 1], list1[j] = list1[j], list1[j - 1] # Меняем их местами
print(list1) # Выводим отсортированный список
разберем каждую итерацию внешнего и внутреннего циклов, записывая значения всех переменных.
---
### Исходный список:
`list1 = [3, 4, 1, 8, 0]`
`n = 5` (длина списка)
---
### **Внешний цикл `i=0` (первый проход):**
- Количество итераций внутреннего цикла: `range(1, n - i)` → `range(1, 5)` (проход по индексам `j=1, 2, 3, 4`).
#### Внутренний цикл:
1. **Итерация `j=1`:**
- Сравниваем: `list1[j-1] = list1[0] = 3` и `list1[j] = list1[1] = 4`.
- Условие: `3 > 4` — **ложь**, обмена нет.
- Список: `[3, 4, 1, 8, 0]`.
2. **Итерация `j=2`:**
- Сравниваем: `list1[j-1] = list1[1] = 4` и `list1[j] = list1[2] = 1`.
- Условие: `4 > 1` — **истина**, меняем местами.
- Список: `[3, 1, 4, 8, 0]`.
3. **Итерация `j=3`:**
- Сравниваем: `list1[j-1] = list1[2] = 4` и `list1[j] = list1[3] = 8`.
- Условие: `4 > 8` — **ложь**, обмена нет.
- Список: `[3, 1, 4, 8, 0]`.
4. **Итерация `j=4`:**
- Сравниваем: `list1[j-1] = list1[3] = 8` и `list1[j] = list1[4] = 0`.
- Условие: `8 > 0` — **истина**, меняем местами.
- Список: `[3, 1, 4, 0, 8]`.
---
### **Внешний цикл `i=1` (второй проход):**
- Количество итераций внутреннего цикла: `range(1, n - i)` → `range(1, 4)` (проход по индексам `j=1, 2, 3`).
#### Внутренний цикл:
1. **Итерация `j=1`:**
- Сравниваем: `list1[j-1] = list1[0] = 3` и `list1[j] = list1[1] = 1`.
- Условие: `3 > 1` — **истина**, меняем местами.
- Список: `[1, 3, 4, 0, 8]`.
2. **Итерация `j=2`:**
- Сравниваем: `list1[j-1] = list1[1] = 3` и `list1[j] = list1[2] = 4`.
- Условие: `3 > 4` — **ложь**, обмена нет.
- Список: `[1, 3, 4, 0, 8]`.
3. **Итерация `j=3`:**
- Сравниваем: `list1[j-1] = list1[2] = 4` и `list1[j] = list1[3] = 0`.
- Условие: `4 > 0` — **истина**, меняем местами.
- Список: `[1, 3, 0, 4, 8]`.
---
### **Внешний цикл `i=2` (третий проход):**
- Количество итераций внутреннего цикла: `range(1, n - i)` → `range(1, 3)` (проход по индексам `j=1, 2`).
#### Внутренний цикл:
1. **Итерация `j=1`:**
- Сравниваем: `list1[j-1] = list1[0] = 1` и `list1[j] = list1[1] = 3`.
- Условие: `1 > 3` — **ложь**, обмена нет.
- Список: `[1, 3, 0, 4, 8]`.
2. **Итерация `j=2`:**
- Сравниваем: `list1[j-1] = list1[1] = 3` и `list1[j] = list1[2] = 0`.
- Условие: `3 > 0` — **истина**, меняем местами.
- Список: `[1, 0, 3, 4, 8]`.
---
### **Внешний цикл `i=3` (четвертый проход):**
- Количество итераций внутреннего цикла: `range(1, n - i)` → `range(1, 2)` (проход по индексу `j=1`).
#### Внутренний цикл:
1. **Итерация `j=1`:**
- Сравниваем: `list1[j-1] = list1[0] = 1` и `list1[j] = list1[1] = 0`.
- Условие: `1 > 0` — **истина**, меняем местами.
- Список: `[0, 1, 3, 4, 8]`.
---
### **Внешний цикл `i=4` (пятый проход):**
- Внутренний цикл не выполняется, так как `n - i = 1`.
---
### Итог:
Список отсортирован: `[0, 1, 3, 4, 8]`.