2016-05-06 25 views
3

私はPythonの初心者です。私はシリーズの番号である文字列のリストの最初の番号を取得しようとしています。その番号は共通の番号から始まります。文字列の最初の文字に基づいて、文字列のリスト内の要素の最初の出現箇所を見つけます。

例:私の予想出力

x = ['512','345','321','345','674','132','231','145','214','576'] 

result = ['512','345','674','132','231'] 

すなわち、リスト内の1から始まるすべての番号で、たとえば言う、私は他のすべての番号についても同様に第一番号を取得する必要があります。

forループを2回使用して取得できます。しかし、私はそれを行うためのより良い方法があることを知りたいです。

注:リストは、数字である文字列のリストです。

+0

期待される出力が期待している理由を説明できますか?私はどのアルゴリズムを作成しようとしているのか分かりません。あなたがこれまでに持っていたコードを表示し、それが動作するかどうかを示します(そうでない場合、どのように失敗するか)。 – dcrosta

+0

あなたの英語はここではあまり貧しくありません。 –

+0

各サブリストの最初の番号を印刷しようとしています。たとえば、リストに1〜1000の数字が含まれているとします.100未満のすべての数字は1つのサブリストで、200より小さい数字はサブリストです。私はリストをサブリストに分割し、これを行うことができます。しかし私は1つのリストだけでそれをしたい。 – newbie

答えて

4

ジェネレータ機能を使用してこれを行うことができます。この関数では、最初のリストを反復し、各要素のチェックに対して、同じ文字で始まる別の要素がすでに文字列のsetに存在するかどうかをチェックします。一致するものが見つからない場合、その要素はyieldとなります。

>>> def get_num(lst): 
...  found = set() 
...  for element in lst: 
...   if not any(item.startswith(element[0]) for item in found): 
...    found.add(element) 
...    yield element 
... 
>>> x = ['512','345','321','345','674','132','231','145','214','576'] 
>>> list(get_num(x)) 
['512', '345', '674', '132', '231'] 
+0

Worked perfect(Y) – newbie

関連する問題