33

リストがあったとします

my_list = ['91 9925479326','18002561245','All the best','good']

ここで、以下のように91始まるリスト内の文字列を無視したい18

result = []
for i in my_list:
   if not '91' in i:
      if not '18' in i:
         result.append(i) 

ここでは、リスト内包表記でこれを実現したいと思います。

リスト内包表記でif条件を2つ書く方法はありますか?

4

3 に答える 3

43
[i for i in my_list if '91' not in i and '18' not in i]

変数名として使用しないでくださいlist。組み込み関数を隠します。

于 2012-07-31T13:07:54.850 に答える
10

3 つ以上の値 (91 と 18) がある場合、またはそれらが動的に生成される場合は、次の構造を使用することをお勧めします。

[i for i in my_list if not i.startswith(('91', '18'))]

91または、とが文字列に含まれているかどうかを確認したい場合18(最初だけでなく)、in代わりに を使用しstartswithます。

[i for i in my_list if all(x not in i for x in ['91', '18'])]

使用例:

>>> my_list = ['91 9925479326','18002561245','All the best','good']
>>> [i for i in my_list if all(not i.startswith(x) for x in ['91', '18'])]
['All the best', 'good']
>>> 
于 2012-07-31T13:27:34.987 に答える
2

両方の条件を「マージ」できます。

if ((not '91' in i) and (not '18' in i))
于 2012-07-31T13:08:23.413 に答える