July 14, 2022

Операции с коллекциями

Вернуться к содержанию

Множества, словари, списки и строки - это коллекции.

Для следующего кода будет такой результат:

string = 'По Борнео и Ямайке ходит слон в трусах и майке'
new_list = list(string)
new_set = set(string)
print('Список из строки: ' + str(new_list))
print('Сет из строки: ' + str(new_set))

Отрицательные индексы
работают со всеми коллекциями

# Обратимся к элементам списка по отрицательным индексам
friends = ['Сергей', 'Соня', 'Миша', 'Дима', 'Алина']
print(friends[-3]) # Миша 
print(friends[-5]) # Сергей 
# То же и со строкой 
monument_string = 'Я памятник себе воздвиг нерукотворный'
print(monument_string[-2]) # ы 
print(monument_string[-37]) # Я

Разобрать строку на слова: метод split()

milk_str = 'молоковоз' # Применяем метод split() с аргументом 'о': 
new_list = milk_str.split('о')
print(new_list)
 # Будет напечатано: ['м', 'л', 'к', 'в', 'з']
counter_str = 'Раз-два-три-четыре-пять, вышел зайчик погулять'
# Преобразуем строку в список, а разделителем будет дефис
counter_list = counter_str.split('-')
print(counter_list)
# результат:['Раз', 'два', 'три', 'четыре', 'пять, вышел зайчик погулять']

# Преобразуем строку в список, а разделителем будет дефис
counter_list = counter_str.split('-')
print(counter_list)

# Создадим ещё одну строку
blok_str = 'Ночь. Улица. Фонарь. Аптека'
# Разобьём фразу по словам. 
# Разделителем будет служить сочетание точки и пробела:
blok_list = blok_str.split('. ')
print(blok_list)
Делим строку на слова:
poem_str = 'Дама сдавала багаж'

# Применяем к строке метод split(), в скобках указываем пробел в кавычках:
words_list = poem_str.split(' ')
# Печатаем результат:
print(words_list)
#результат: ['Дама', 'сдавала', 'багаж']

Метод join

words_list = ['раз', 'два', 'три', 'четыре', 'пять', 'вышел', 'зайчик', 'погулять']
# Метод join() "склеивает" элементы списка,
# создавая строку, в которой 
# элементы исходного списка разделены текстовым символом;
# для разделения применим дефис:

new_string = '-'.join(words_list)
print(new_string)

Результат: раз-два-три-четыре-пять-вышел-зайчик-погулять

ВАЖНО: join возвращает строку (STR). Не [list] или {set}

#Если указать в аргументах пробел, то список будет объеденен с пробелами
#Если указать в аргументах просто кавычки, элементы списка сосльются в одно
#слово
new_string = ' '.join(words_list) # раз два три четыре пять вышел зайчик погулять 
new_string = ''.join(words_list) # раздватричетырепятьвышелзайчикпогулять

Примеры работы с словарями и списками

Как добавить и распечатать элементы списка или словаря:
DATABASE = {    
            'Серёга': 'Омск',    
            'Соня': 'Москва',    
            'Миша': 'Москва',    
            'Дима': 'Челябинск',    
            'Алина': 'Красноярск',    
            'Егор': 'Пермь',    
            'Коля': 'Красноярск'
}
# ------------------Первый вариант-----------------------------------
list_of_friends=','.join(DATABASE.values())
print(list_of_friends)

# -----------------Второй вариант-------------------------------------
friends_string = ''
for name in city:
    friends_string = friends_string + " " + name
print(friends_string)

# ----------------Третий вариант--------------------------------------
lst = [print(city) for city in DATABASE.values()]
# в третьем варианте вывод будет в столбик

Команды в статье:

new_list = list(string) # cоздает список
new_set = set(string) # создает множество
print(friends[-3]) # печать элемента списка по индексу
counter_list = counter_str.split() # элементы по признаку в скобках '-'
new_string = '-'.join(words_list) # аргументы могут быть разные '', ' '...
new_string = ''.join(words_list) # раздватричетырепятьвышелзайчикпогулять

Дополнительные ссылки:

Convert String to List in Python (English)

Вернуться к содержанию

Примечания:

Давайте поправим функцию process_friend(name, query)

Она будет принимать на вход какое-то имя и запрос. И с помощью написанных

условий возвращать ту или иную фразу, в зависимости от того, есть имя в словаре или нет.

В условии нужно сравнить вопрос в переменной query​ вопрос «ты где?»

Внутри функции вместо print() укажем везде return, а строку «<неизвестный запрос>» заключите в угловые скобки

Код для функции будет выглядеть следующим образом:

def функция(имя, запрос):
    если имя есть в словаре DATABASE:
        если запрос == 'ты где?':
            город = словарь[имя]
            возвращаем f'{имя} в городе {город}'
        иначе:
            возвращаем '<неизвестный запрос>'
    иначе:
        возвращаем f'У тебя нет друга по имени {имя}'

35 строку кода удалим, ведь у нас уже есть вызов функции на 36 строке.
И последний штрих — вызовы функции process_anfisa​() в конце кода замените на process_query​() и там, где нет имени, добавим имя 'Анфиса'. Получилось разобраться? :)

Она печатается при вызове функции process_query​ в конце кода.

Цепочка выполнения будет такая:

1) Печатаем вызов функции ​print(process_query('Анфиса, сколько у меня друзей?'))

2) Следом начинает работу эта функция и по итогу срабатывает вызов process_anfisa​() с вопросом «сколько у меня друзей?»

3) В результате работы process_anfisa​ возвращается вызов функции format_friends_count​()

4) И из format_friends_count​() возвращается в первый пункт, где выполнение всех шагов ждёт функция print() чтобы вывести фразу с количеством друзей на экран.

Пишите, если будем нужны — мы на связи. Успехов в учёбе

Вернуться к содержанию