有点复杂的列表理解

Sam*_*tch 1 python list-comprehension

我要说,我需要过滤一个二维数组

[
  [1, 'eth0', 'description', ...],
  [2, 'virbr0', 'description', ...],
  [3, 'qvb25f982e4-ae', 'description', ...],
  [4, 'tap25f982e4-ae', 'description', ...],
...
]
Run Code Online (Sandbox Code Playgroud)

基本上我想过滤掉某些接口名称.我过滤掉接口,q如下所示:

info = [i for i in info if not i[1].startswith('q')]
Run Code Online (Sandbox Code Playgroud)

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

exclude = ['q','tap']
info = [i for i in info if not i[1].startswith(exclude)]
Run Code Online (Sandbox Code Playgroud)

但我似乎无法弄清楚这样的逻辑.

mgi*_*son 8

你太近了!转exclude元组:

exclude = ('q','tap')
info = [i for i in info if not i[1].startswith(exclude)]
Run Code Online (Sandbox Code Playgroud)

文档:

... 前缀也可以是要查找的前缀元组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']]
Run Code Online (Sandbox Code Playgroud)

1我强调了......