2016-09-16 15 views
-2

私は最近、Pythonを学び始めました。コードの書き方を改善し、Pythonにすることを試みています。 したがって、次のことがよりエレガントに策定できるかどうか、誰かが私に説明することができれば、本当にうれしいでしょう。 うまくいけば、これは重複していません(私はチェックしましたが、あなたは分かりません)特定のPythonのListElementsを無視する優雅な方法

私は5つの要素のリストを持っています。 たとえば、[1、2、3、3、4]があるとします。 すでにdouble(list)という関数があります。リスト要素が2回存在する場合、その要素(この場合は3)が返されます。

このリストから、1回だけ存在する数字(1,2,4)を含むタプルを生成したいとします。

1つのオプションは次のとおりです。

  1. ダブル(リスト)機能を実行し、二重のある要素の値を取得します。
  2. リストアイテムの上に空のタプル
  3. 反復を作成し、その値は、二重(リスト)関数が返されたものに等しくない場合、
  4. タプルに追加戻りタプル。

私の質問です:これを行うよりエレガントな/ Pythonicの方法はありますか? (?1行で、多分もっと複雑な式を使用して)事前

+0

あなたには、いくつかの作業コードを書いた場合は、良好な応答を得るかもしれないが、それを取りました〜[codereview.se]に。 – jonrsharpe

答えて

0

あなたは(うまくもちろんの実際のリスト宣言:)を除く)シングルラインソリューションをしたいので:

your_list = [1, 2, 3, 3, 4] 

uniques = [item for item in your_list if your_list.count(item) == 1] 
+0

ありがとう!これは私が探していたものです。誰かが私に、リストが最初にセットになっているスレッドを指摘しました。重複を取り除くはずです。だから私はすでに2つのオプションがあります:-) – eidimon

0

おかげで私はそのためcollections.Counterを使用します。

>>> import collections 
>>> l = [1, 2, 3, 3, 4] 
>>> c = collections.Counter(l) 
>>> [el for el in l if c[el] == 1] 
[1, 2, 4] 
1

これを行うための一般的な方法は、セットを作ることです要素数を数え、数えたり、またはcollections.Counterを使用してリストを調べ、空のリストを作成して従来のループで追加したり、フィルタで理解したりすることで、適切な要素のみを含めることができます。

>>> import collections 
>>> l = [1, 2, 3, 3, 4] 
>>> c = collections.Counter(l) 
>>> new_list = [item for item in l if c[item] < 2] 
>>> new_list 
[1, 2, 4] 
関連する問題