2017-11-18 27 views
2

私はすべてのIDを再グループ化するマスターリストを持っています。リストの要素を削除する

master = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

これらのうち、いくつかは除外したいと思います。だから私はあなたの意見では

exclude = [1, 4, 5] 

を除外する必要があるIDの第2のリストをした、持つために作るために良い操作です:

master_exclude = [2, 3, 6, 7, 8, 9, 10] 

あなたは私が何を意味するか知っていますか?

ありがとうございました!

+0

この質問をする前に何か試しましたか? –

+0

@wwiiありがとう!私も重複を探していた。 –

答えて

6

この条件list comprehensionは動作します:

master_exclude = [x for x in master if x not in exclude] 

をこれらの関与のリストが大きい場合は、最初よりパフォーマンスをチェック含ませるためにsetexcludeの変換を検討:

exclude = set(exclude) 
+0

OPからの努力はありません。多分それは宿題だったでしょう。 –

+0

@ElisByberi:私には、stackoverflowがhomeworksのprorgammingに問題があるというリンク/テキストを表示してください。 – DRPK

+0

@DRPK https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions私はOPが彼自身の努力を示していないとElisByberiに同意するでしょう。 – schwobaseggl

0

この意志masterのリストから要素を削除してください。exclude

for i in exclude: 
    master.remove(i) 

重複は削除されません。

+1

'exclude'のすべての要素が' master'リストに属していればうまく動作します。それ以外の場合は 'ValueError'となるでしょう –

+1

...そして' remove'は 'O(N)'演算で、このアプローチを 'O(N * M)'にしています。スクラッチ。 – schwobaseggl

+0

@SreeramTPが同意します!ありがとう! –

1

単純なforループでこれを行うことができます。

master = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

exclude = [1, 4, 5] 

for o in exclude: 
    try: 
     master.remove(o) 
    except ValueError: 
     pass 

print(master) # [2, 3, 6, 7, 8, 9, 10] 
+0

になるセットの変換の発言を追加しました。 '[1、1、1、2、3、4、5、6、7、8、9、10]'これを実行した後、最初の ' 2,3、6、7、8、9、10] ' –

+0

それを指摘していただきありがとうございます。 !! –

1

list-comprehensionは間違いなく行くための正しい方法であるが、これはまた、filterで行うことができます。

master_exclude = list(filter(lambda i: i not in exclude, master)) 

います:ない理想的なソリューションが、別の考えです

[2, 3, 6, 7, 8, 9, 10] 

それとも、使用することができwhilefor-loop:同じ与え

for i in exclude: 
    while master.count(i) > 0: 
     master.remove(i) 

結果。

関連する問題