Работа со списками (join, split)
строка.split
- str.split(sep=None, maxsplit=-1) - разделить по sep на много частей
- str.rsplit() - считает разделители справа
- str.partition() - разделить на 3 части - до, разделитель, после
- str.rpartition() - справа
>>> '1,2,3'.split(',')
['1', '2', '3']
>>> '1,2,3'.split(',', maxsplit=1)
['1', '2,3']
>>> '1,2,,3,'.split(',')
['1', '2', '', '3', '']
>>> s = '1,2,3'
>>> s.partition(',')
('1', ',', '2,3')
>>> s.partition('z')
('1,2,3', '', '')
строка.join(последовательность строк)
>>> a = ['hi', 'ha', 'ho']
>>> '-'.join(a)
'hi-ha-ho'
Что делать, если нужно напечатать список чисел? Сделать из них строки!
>>> a = [1, 2, 3]
>>> '='.join(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> '='.join(map(str, a))
'1=2=3'
>>> 'abc'.join(map(str, a))
'1abc2abc3'
строка.find(подстрока)
Индекс начала подстроки в строке, (иначе проверяем как 'el' in 'Hello')
- str.find(sub[, start[, end]]) - возвращает -1, если подстроки нет
- str.rfind(sub[, start[, end]]) - ищет справа
>>> s = '1abc2abc3'
>>> s.find('bc')
2
>>> s.rfind('bc')
6
Задачи (Вьетнам)
Задача 1, basename
basename(path).
Дан путь. Вернуть имя файла.
>>> s = '/home-local/student/workspace/python_1y/myprog.py'
>>> basename(s)
'myprog.py'
>>> s0 = 'second.jpg'
>>> basename(s0)
'second.jpg'
>>> s1 = '/home-local/student/workspace'
>>> basename(s1)
'workspace'
Задача 2, dirname
Написать функцию dirname, которая по данному пути возвращает директорию.
>>> dirname(s)
'/home-local/student/workspace/python_1y'
>>> dirname(s0)
''
>>> dirname(s1)
'/home-local/student'
>>> s2 = '../tatyderb/hello.py'
>>> dirname(s2)
'../tatyderb'
Задача 3, splitext
Написать функцию splitext, которая возвращает список из имени файла и его расширения
>>> splitext(s)
('/home-local/student/workspace/python_1y/myprog', '.py')
>>> splitext(s0)
('second', '.jpg')
>>> splitext(s1)
('/home-local/student/workspace', '')
>>> splitext(s2)
('../tatyderb/hello', '.py')
Дополнительно: если имя файла начинается с точки, то это имя файла, а не расширение:
>>> splitext('.config')
('.config', '')
Задача 4, resolve
Нужно соединить 2 пути.
>>> resolve('/home-local/student/', 'workspace')
/home-local/student/workspace
>>> resolve('/home-local/student', 'workspace')
/home-local/student/workspace
>>> resolve('/home-local/student/workspace/ivan', '../lee')
/home-local/student/workspace/lee
>>> resolve('/home-local/student', './lee')
/home-local/student/lee
Задача 5
Задачи (Мьянма)
Задача 1. h.e.l.l.o
Написать функцию points, которая между всеми символами ставит точку.
Сделать из строки список строк по 1 символу:
>>> s = 'hello'
>>> list(s)
['h', 'e', 'l', 'l', 'o']
Надо сделать:
s = 'hello'
s1 = points(s)
print(s1) # h.e.l.l.o
Задача 2 с вариантами.
Есть список с данными о купленных фруктах. Нужно прочитать эти данные и найти сколько килограмм весят все фрукты.
Вариант 0
4
apple 5
orange 3.5
grapes 1.2
apple 7
Ответ: 16.7
Дополнительно: найти сколько apple.
Ответ: 5+7 = 12
Вариант 1
4
apple-5
orange-3.5
grapes-1.2
apple-7
Дополнительно: найти самое большое число (сколько весит самый большой ящик).
Вариант 2
4
5=apple
3.5=orange
1.2=grapes
7=apple
Дополнительно: сколько строк содержит apples.
Вариант 3
4
1/apple/5
2/orange/3.5
3/grapes/1.2
4/apple/7
Дополнительно: Кого больше - orange или grapes.
Напечатать orange, если больше orange, чем grapes.
Напечатать grapes, если больше grapes, чем orange.
Вариант 4
4
apple 5*2
orange 3.5*1
grapes 1.2*3
apple 7*1
Дополнительно: найти самое большое число (сколько весит самый большой ящик).
Вариант 1
Вариант 1
Вариант 1
Вариант 1