Skip to main content
 首页 » 编程设计

python之有点复杂的列表理解

2025年05月04日14insus

假设我需要过滤一个二维数组

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

基本上我想过滤掉某些接口(interface)名称。我像这样过滤掉以 q 开头的接口(interface):

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

但我需要能够定义要忽略的接口(interface)前缀列表,例如:

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

但我似乎无法理解这样的事情的逻辑。

请您参考如下方法:

你太接近了!将 exclude 转换为 tuple:

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

来自documentation :

... prefix can also be a tuple1 of prefixes to look for....


演示:

>>> 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']] 

1我加了重点...