2015-09-24 40 views
0

我有存儲在一個列表數據,基本格式如下:刪除列表中的項目的部分?

['http://www.website.com/category/apples', 
'http://www.website.com/category/oranges', 
'http://www.website.com/category/bananas', 
'http://www.website.com/category/pears'] 

大約有900包含在此列表中是唯一的鏈接。我想以後category(例如​​,oranges等)

這可能是通過for循環像下面這樣做返回的內容,但我越來越堅持使用正確的功能。基本上,這是我迄今爲止所擁有的。該列表保存在links

for l in links: 
    new_list = l.search('category') 
    return l 

我該如何優化基本上「修剪」列表中每個元素的內容?

+0

正則表達式,男人。 –

+0

我不明白如何適用於這個問題 –

+0

或簡單地說l [31:]如果你的鏈接都有相同的開始。 – Julien

回答

0
l = ['http://www.website.com/category/apples', 
'http://www.website.com/category/oranges', 
'http://www.website.com/category/bananas', 
'http://www.website.com/category/pears'] 

li = [ x[x.rindex('/')+1:] for x in l ] 

print(li) 

輸出

[ '蘋果', '桔子', '香蕉', '梨']

+0

可能要搜索術語'category'而不僅僅是斜線。適用於基本示例,但原始問題的要求在分類後特別提及。 – valdarin

0

這是你使用正則表達式。您將您的字符串與匹配「category /」的正則表達式匹配,然後使用括號操作符返回後面的字符。

import re 
for l in links: 
    m = re.match('.+/category/(.+)', l) 
    new_list.append(m.group(1)) 
return new_list 

要進行優化,可以預編譯的表達,這可能是值得做的900多個字符串:

import re 
cat = re.compile('.+/category/(.+)') 
for l in links: 
    new_list.append(cat.match(l).group(1)) 
return new_list 

這可以在列表中理解,而不是一個for循環來完成:

import re 
cat = re.compile('.+/category/(.+)') 
return [cat.match(l).group(1) for l in links] 
+0

這匹配'/蘋果'btw – Leb

+0

你確定嗎?它在我進行測試時按預期返回。對於那些沒有「category /」的行來說,它是不健壯的,在實際使用之前我會修正這些行,但它對測試數據來說很有用。 –

+0

根據[regex101](https://regex101.com/),我會發佈一個答案,但在這裏看到兩個我沒有。 – Leb