<p>在附加文件名之前,可以进一步分隔返回的<code>vlanlist</code>:</p>
<pre><code># First, find the index in the list where "interface Vlan" exists:
# Also, append None at the end to signify index for end of list
indices = [i for i, v in enumerate(l) if v.startswith('interface Vlan')] + [None]
# [0, 3, None]
# Then, create the list of lists based on the extracted indices and prepend with filename
newlist = [[filename] + vlanlist[indices[i]:indices[i+1]] for i in range(len(indices)-1)]
for l in newlist: print(l)
# ['test.cfg', 'interface Vlan1', ' no ip address', ' shutdown']
# ['test.cfg', 'interface Vlan2003', ' description XXXXXX', ' ip address 10.224.6.130 255.255.255.224', ' no ip redirects', ' no ip unreachables', ' no ip proxy-arp', ' load-interval 60', ' arp timeout 420']
</code></pre>
<p>对第二个列表理解的解释:</p>
<pre><code>newlist = [
[filename] + # prepend single-item list of filename
vlanlist[ # slice vlanlist
indices[i]: # starting at the current index
indices[i+1] # up to the next index
]
for i in range(len(indices)-1) # iterate up to the second last index so i+1 doesn't become IndexError
]
</code></pre>
<p>如果您不喜欢索引方法,可以尝试<code>zip</code>:</p>
<pre><code>lists = [[filename] + vlanlist[start:end] for start, end in zip(indices[:-1], indices[1:])]
</code></pre>