<pre><code>['1', '2', '4', 'c']
</code></pre>
<p>不符合条件</p>
<pre><code>x[0] != "1"
</code></pre>
<p>以及</p>
<pre><code>x[1] != "2"
</code></pre>
<p>与其使用<code>or</code>,我相信更自然和可读的方法是:</p>
<pre><code>lambda x: (x[0], x[1], x[2]) != ('1','2','3')
</code></pre>
<p>出于好奇,我比较了三种方法,呃。。。比较,结果如预期:切片列表最慢,使用元组更快,使用布尔运算符最快。更准确地说,比较的三种方法是</p>
<pre><code>list_slice_compare = lambda x: x[:3] != [1,2,3]
tuple_compare = lambda x: (x[0],x[1],x[2]) != (1,2,3)
bool_op_compare = lambda x: x[0]!= 1 or x[1] != 2 or x[2]!= 3
</code></pre>
<p>结果分别是:</p>
<pre><code>In [30]: timeit.Timer(setup="import timeit,random; rand_list = [random.randint(1,9) for _ in range(4)]; list_slice_compare = lambda x: x[:3] != [1,2,3]", stmt="list_slice_compare(rand_list)").repeat()
Out[30]: [0.3207617177499742, 0.3230015148823213, 0.31987868894918847]
In [31]: timeit.Timer(setup="import timeit,random; rand_list = [random.randint(1,9) for _ in range(4)]; tuple_compare = lambda x: (x[0],x[1],x[2]) != (1,2,3)", stmt="tuple_compare(rand_list)").repeat()
Out[31]: [0.2399928924012329, 0.23692036176475995, 0.2369164465619633]
In [32]: timeit.Timer(setup="import timeit,random; rand_list = [random.randint(1,9) for _ in range(4)]; bool_op_compare = lambda x: x[0]!= 1 or x[1] != 2 or x[2]!= 3", stmt="bool_op_compare(rand_list)").repeat()
Out[32]: [0.144389363900018, 0.1452672728203197, 0.1431527621755322]
</code></pre>