2017-12-02 14 views
-1

私は現在、他の多くの項目のリスト内にいくつかの望ましくない項目のブラックリストを作成しようとしています。-multiple-要素がリストにない場合、

私は現在、正常に動作し、この非常に醜い条件文を持って、私はそれがに追加する退屈だ見つけ、不良に見えます。手動で追加する必要があります。これは問題ですが、コード内の関数に基づいてブラックリストに追加したいので、手動で追加するだけで十分ではありません。

非常に反復思われる、私がしたい項目のタイトルにあるように「NEW」を希望し、次のすべての条件文は、「ブラックリストにはない」です。

if "NEW" in lst[i][0] and "Pears" not in lst[i][0] and "Strawberries" not in lst[i][0] and "Oranges" not in lst[i][0] and "Cherries" not in lst[i][0] and "Plums" not in lst[i][0] and "Nectarines" not in lst[i][0] and "raspberries" not in lst[i][0] and "Apples" not in lst[i][0]: 

私は単純にブラックリストリストを作成する方法を見つけるのが好き、そしてブラックリスト内の任意の項目を別のリストに見つからない場合は、Pythonが進むだろう。

は、私はすでにブラックリストリストを作成しようとした試みている:

lst = ['Broccoli', 'Chicken', 'Oranges', 'Apples', 'Squash', ' Salmon'] 

blacklist = ['Pears', 'Strawberries', 'Oranges'] 

#My actual lists are much longer 

for i in range(len(lst)): 
    for blacklisteditem in blacklist: 
     if blacklisteditem in lst[i]: 
      print("This item is not blacklisted, proceeding..") 
     else: 
      print("This item was blacklisted") 

しかし、これが返されます。ここでは明らかに

This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item is not blacklisted, proceeding.. 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 
This item was blacklisted 

ない目的。私は見落としているいくつかの解決策がなければならない、誰かが私を助けることができる? "if x in lst:"のロジックを適用したいだけですが、xを複数の項目、できればリスト内の項目、またはおそらく追加できる文字列にしたいのですか?

私は私のプログラムは、追加のエントリを追加できるようにしたいので、私は基本的には、手動でスクリプトを編集するのではなく、このブラックリストにいくつかの方法または別のものを追加できるようにする必要があります。これが何らかの形で長く長く醜い条件付きで追加されている場合は、動作する限り、それは問題ありません。

+2

'list'を変数名として使用しないでください。組み込み型をマスキングしています。 –

答えて

5

あなたのリストとの交差部分が存在しない場合は、あなたのブラックリストセット、およびテストを行います(設定は互いに素です):

blacklist = {'Pears', 'Strawberries', 'Oranges'} 
if blacklist.isdisjoint(lst): 
    print("This item is not blacklisted, proceeding..") 
else: 
    print("This item was blacklisted") 

set.isdisjoint() method戻りTrue共通する要素がない場合にのみ:

>>> lst = ['Broccoli', 'Chicken', 'Oranges', 'Apples', 'Squash', ' Salmon'] 
>>> blacklist = {'Pears', 'Strawberries', 'Oranges'} 
>>> blacklist.isdisjoint(lst) 
False 
>>> blacklist.isdisjoint(['Broccoli', 'Chicken', 'Apples', 'Squash', ' Salmon']) 
True 

ブラックリストに載っているすべてのアイテムがテストされるまで待つことはありませんでした。すべての要素をテストすると、が印刷されます。 forループが完了するまで待ってから、blacklist要素のどれも出現していないという結論を導き出す必要があります。

関連する問題