Выбор элемента в списке по определенной логике
Напиши функцию которая принимает строку, которая представляет собой URL страницы этого товара в Интернет-магазине и возвращает идентификатор товара из строки. Идентификатор это первое число после символа р (символов р может быть несколько в строке).
Написал код но не получается взять следующее число, после p.
def get_product_id(url: str) -> str:
new = url.split('-')
for i in new:
if i == 'p':
if (i+1).isdigit():
s = new.remove(i+1)
return s
Для проверки использую вот такие URL адреса:
print(get_product_id("exampleshop.com/dry-water-just-add-water-to-get-water-p-147-24122017.html")) # 147
print(get_product_id("exampleshop.com/fancy-coffee-cup-p-90764-12052019.html")) # "90764"
print(get_product_id("exampleshop.com/public-toilet-proximity-radar-p-942312798-01012020.html")) # "942312798"
print(get_product_id("exampleshop.com/best-hotel-123123-p-321321-01012020.html")) # "321321"
print(get_product_id("exampleshop.com/a-have-a-lot-of-p-in-my-url-p-007-01012020.html")) # 007
Ответы (1 шт):
def get_product_id(url: str) -> str:
new = url.split('-')
for i in range(len(new)-1):
if new[i] == 'p':
if new[i+1].isdigit():
s = new[i+1]
return s
Доделал именно вашу функцию, вы использовали for i in new, это значит что i будет элементом массива, в моей реализации i это именно индекс элемента. Тогда чтобы обратиться к элементу мы используем new[i]. Также стоит заметить, что метод new.remove() ничего не возвращает, а лишь удаляет элемент из списка, поэтому я заменил эту строчку простым присваиванием. Ещё стоит обратить внимание на то, чтобы не выйти за пределы массива, мы используем len(new)-1, так как у нас есть new[i+1]. (это сделано на тот случай, если "p" окажется последним элементом в массиве)