Выбор элемента в списке по определенной логике

Рейтинг: 0Ответов: 1Опубликовано: 21.01.2023

Напиши функцию которая принимает строку, которая представляет собой 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

Ответы

▲ 0Принят
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" окажется последним элементом в массиве)