回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我们储存了电话线</p>
<pre><code>['frontend2', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'POST', '2016-10-28T09:29:07.940000'],
</code></pre>
<p>在一个名为data的数组中。我们知道它在那里,因为:</p>
<pre><code>>>> print data
[['frontend2', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'POST', '2016-10-28T09:29:07.940000'], ['worker42', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'HANDLE', '2016-10-28T09:29:07.970000'], ['frontend7', '2ef630e2-64fb-4100-8a04-07c4d25887b7', 'GET', '2016-10-28T09:29:07.970000'], ['frontend9', 'a9af2495-f2f0-42e3-81fa-d99d4bac5b9c', 'GET', '2016-10-28T09:29:07.990000'], ['frontend19', '0336af66-edff-48e0-958c-42d09d0efd7a', 'GET', '2016-10-28T09:29:08.010000'], ['frontend14', 'ebc80de2-3708-4aa5-88e4-d3c08a018961', 'GET', '2016-10-28T09:29:08.030000'], ['frontend16', '14fd9242-7a0c-4f42-ab0c-f8e6de21f948', 'GET', '2016-10-28T09:29:08.040000'], ['frontend2', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'RESPOND', '2016-10-28T09:29:08.050000'], ['frontend5', '8b3e6d9f-abbc-46c0-a458-05e6fd3bbe6c', 'POST', '2016-10-28T09:29:08.060000'], ['frontend3', 'd8389212-c91e-450b-8745-2cb121cb9623', 'POST', '2016-10-28T09:29:08.090000']]
</code></pre>
<p>甚至可以拉出整条线:</p>
<pre><code>>>> print data[0]
['frontend2', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'POST', '2016-10-28T09:29:07.940000']
</code></pre>
<p>可以拉出管路的任何部分:</p>
<pre><code>>>> print data[0][0]
frontend2
</code></pre>
<p>问题:我需要找到一行以frontend2开头并包含RESPOND的内容,然后拉出这行的其他部分</p>
<p>有人可能认为索引至少会找到它,但不会:</p>
<pre><code>>>> data.index("frontend2")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'frontend2' is not in list
>>>
</code></pre>
<p>做这件事的Python式方法是什么?<br/>
理想情况下,我可以
资料[前端2][2]
它将扫描列表,找到匹配的第一行,然后返回2索引项(或者,对于脚本的另一部分,覆盖2项而不触及行的其余部分。)</p>
<p>过滤器将得到我所有的线;大概我可以进一步过滤,只得到get行?我还没有找到这方面的好文件;如有任何解释,我们将不胜感激。在列表理解模式下执行此操作会产生相同的结果</p>
<pre><code>>>> print filter(lambda x: 'frontend2' in x, data)
[['frontend2', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'POST', '2016-10-28T09:29:07.940000'], ['frontend2', 'ac1b360e-daa8-4102-bc7e-aae01ac5f6ab', 'RESPOND', '2016-10-28T09:29:08.050000']]
</code></pre>
<p>一个潜在的解决方案可能是使用正则表达式和过滤器,但显然应该有更好的方法</p>