2016-05-06 166 views
3

我是python的新手。我正在嘗試獲取一系列字符串中的第一個數字,這些字符串是以一個常見數字開頭的一系列數字。根據字符串中的第一個字符查找字符串列表中第一次出現的元素

例如:

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

我的預期輸出:

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

即說,例如,在所有的數字開始在列表1中,我應該得到的第一位數字同樣對於所有其他號碼。

我可以使用循環兩次來得到它。但我想知道有沒有更好的方法來做到這一點。

注意:該列表是一個字符串列表,其中給出的數字只是一個例子。

+0

你能解釋爲什麼你的預期產出是你所期望的嗎?我不明白你想要創建什麼算法。顯示到目前爲止您的代碼,並指出它是否有效(如果沒有,它是如何失敗)也會有所幫助。 – dcrosta

+0

你的英語在這裏很差,不完全確定你想要什麼。 –

+0

我正在嘗試打印每個子列表的第一個數字。例如,列表包含1到1000之間的數字,所有小於100的數字是一個子列表,數字小於200是子列表。我可以將列表分成子列表並執行此操作。但我想只用一個列表來完成。 – 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

工作完美(Y) – newbie

相關問題