質問: 現在Python3を使いプログラミングの勉強をしています。 質問はリストについてなのですが、リストが二つあり、一つには頻出度順に並んだ単語が順に入っているリストで、もう一つはただ不必要な単語がリストに入っています。 質問内容としましては、頻出度順にデータが入ったリストAから不必要な単語が入ったリストBを取り除きたいというものです。 私自身色々調べたところset()というものがあると知り、 set(リストA) - set(リストB) というようにやってみたのですが、そうするとリストBのデータを取り除けはしたのですが、頻出度順であったデータがぐちゃぐちゃに順番が変わってしまうので、どうしたらよいものかと悩んでいます。 リストAの順番を保ったままで、そのリストAからリストBに入っている複数の単語を取り除きたいということなのですが、どのようにすればよろしいでしょうか? どなたかご教授いただければ幸いです。よろしくお願い致します。
回答: `filter`関数を使って除外すれば順序が維持できます。 考え方は単純なループと同じですが、それを1行で書けます。 ``` words = ["math", "language", "science", "social", "music", "physical"] exlist = ["music", "language"] a = list(filter(lambda x: not x in exlist, words)) # => ['math', 'science', 'social', 'physical'] ``` 内包表記なら、こうなります。 ``` a = [x for x in words if not x in exlist] ```