2016-11-14 7 views
2

2番目のリストに含まれているリストのすべての外側要素を削除していますが、内側に「サンドイッチ」している要素は削除します。私は2つのセットの交差点を補完する方法を知っていますが、ここでは始めと終わりの要素をすべて削除したいだけです。これまでのところ私は、次のように作ってみたが、それは不格好な感じ:他のリストに含まれているリストから外側の要素を取り除く

def strip_list(l, to_remove): 
    while l[0] in to_remove: 
     l.pop(0) 
    while l and l[-1] in to_remove: 
     l.pop(-1) 
    return l 

mylist = ['one', 'two', 'yellow', 'one', 'blue', 'three', 'four'] 
nums = ['one', 'two', 'three', 'four'] 
strip_list(mylist, nums) 
# > ['yellow', 'one', 'blue'] 
+0

'設定(my_listという) - セット(NUMS)'? – sytech

+1

削除される@sytech残っている重複も削除します – Uriel

+2

重複している可能性があります[あるリスト内に存在するすべての要素を別のリストから削除します](http://stackoverflow.com/questions/4211209/remove-all-the-elements-それ以外のものからのリスト) – damores

答えて

1
def strip_list(data, to_remove): 
    idx = [i for i, v in enumerate(data) if v not in to_remove] 
    return data[idx[0]:idx[-1]+1] 
+0

lol、まったく同じコードで作業していますが、入力リストのすべての項目がto_removeリスト内で一致すると失敗します – Skycc

+1

idx elseの場合、データ[idx [0]:idx [-1] +1]を返すように戻り値を変更します[]、その後完璧になる – Skycc

関連する問題