список управления питоном - PullRequest
0 голосов
/ 13 ноября 2009

Я извлек некоторый список URL-адресов и хочу манипулировать этим списком. Ниже приведен образец списка:

http://help.naver.com/service/svc_index.jsp?selected_nodeId=NODE0000000235
http://www.naver.com/rules/service.html
http://news.naver.com/main/principle.nhn
http://www.naver.com/rules/privacy.html
http://www.naver.com/rules/disclaimer.html
http://help.naver.com/claim_main.asp
http://news.naver.com/main/ombudsman/guidecenter.nhn?mid=omb
http://www.nhncorp.com/
http://www.nhncorp.com/

Я хочу извлечь только те URL, которые начинаются с 'http://www.naver.com',, так что, наконец, список, который я хочу получить, следующий

http://www.naver.com/rules/privacy.html
http://www.naver.com/rules/disclaimer.html
http://www.naver.com/rules/service.html

Как мне извлечь только то, что я хочу?

Ответы [ 5 ]

6 голосов
/ 13 ноября 2009

Если ваш список old содержит все URL-адреса в виде строк, вы можете использовать понимание списка *1003* для их фильтрации.

new = [url for url in old if url.startswith('http://www.naver.com')]

Вы могли бы написать это как явный цикл, но он не добавляет ничего, кроме строк кода:

new = []
for url in old:
   if url.startswith('http://www.naver.com'):
       new.append( url )

Если вы планировали удалить элементы из исходного списка, зацикливаясь на нем: никогда не делайте этого, это не сработает. Вместо этого вы можете изменить исходный список с тем же LC :

old[:] = [url for url in old if url.startswith('http://www.naver.com')]
2 голосов
/ 13 ноября 2009

Вы можете сделать это с помощью Список понимания . Это очень мощный способ работы со списками в Python.

Добавив if к списку , вы можете отфильтровать список .

Предполагается, что ваши URL-адреса хранятся в переменной myurls:

filteredurls = [url for url in myurls if url.startswith('http://www.naver.com')]
0 голосов
/ 13 ноября 2009

Кто-то предложил этот альтернативный ответ на основе filter(), но удалил его, я опубликую его здесь снова для полноты:

newList = filter(lambda url: url.startswith('http://www.naver.com'), oldList)

Хотя способ понимания списка кажется более быстрым (и, на мой взгляд, более читабельным):

$ python -m timeit -c "filter(lambda url: url.startswith('1'), map(str, range(100)))"
10000 loops, best of 3: 143 usec per loop

$ python -m timeit -c "[ url for url in map(str, range(100)) if url.startswith('1') ]"
10000 loops, best of 3: 117 usec per loop
0 голосов
/ 13 ноября 2009
result = []
for url in myListOfUrls:
    if 'http://www.naver.com' in url:
        result.append(url)
0 голосов
/ 13 ноября 2009
urlList = [ ... ] # your list of urls
extractedList = [url for url in urlList if url.startswith('http://www.naver.com')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...