2014-11-06 50 views
1

我要過濾一個二維數組,讓我們說有些複雜列表理解

[ 
    [1, 'eth0', 'description', ...], 
    [2, 'virbr0', 'description', ...], 
    [3, 'qvb25f982e4-ae', 'description', ...], 
    [4, 'tap25f982e4-ae', 'description', ...], 
... 
] 

基本上我想篩選出特定的接口名稱。我篩選出接口開始q像這樣:

info = [i for i in info if not i[1].startswith('q')] 

但我需要能夠定義接口前綴列表忽視,如:

exclude = ['q','tap'] 
info = [i for i in info if not i[1].startswith(exclude)] 

但我似乎無法正常工作擺脫這樣的邏輯。

回答

8

你就這麼接近!打開exclude元組

exclude = ('q','tap') 
info = [i for i in info if not i[1].startswith(exclude)] 

documentation

... 前綴也可以是元組1前綴查找的 ....


演示:

>>> info = [ 
... [1, 'eth0', 'description'], 
... [2, 'virbr0', 'description'], 
... [3, 'qvb25f982e4-ae', 'description'], 
... [4, 'tap25f982e4-ae', 'description'], 
... ] 
>>> 
>>> exclude = ('q','tap') 
>>> info = [i for i in info if not i[1].startswith(exclude)] 
>>> 
>>> info 
[[1, 'eth0', 'description'], [2, 'virbr0', 'description']] 

我加的重點...

+0

優秀。謝謝! – Sammitch 2014-11-06 22:26:26

+0

@Sammitch - 沒問題。看到接近正確答案的原始問題總是很好的。 – mgilson 2014-11-07 00:36:03