什麼是效率最高的如何找到列表中只出現一次的字符串索引?查找Python 3列表中唯一值索引的最有效方法
foo = ['it', 'does', 'it', 'very', 'very', 'well']
bar = ??? # bar = [1, 5]
我已經知道集合,字典和列表解析。我試圖在這裏解決的問題是在我的生產代碼中,我有並行數據列表,其中一個索引是許多索引,因爲歷史原因無法更改索引。
什麼是效率最高的如何找到列表中只出現一次的字符串索引?查找Python 3列表中唯一值索引的最有效方法
foo = ['it', 'does', 'it', 'very', 'very', 'well']
bar = ??? # bar = [1, 5]
我已經知道集合,字典和列表解析。我試圖在這裏解決的問題是在我的生產代碼中,我有並行數據列表,其中一個索引是許多索引,因爲歷史原因無法更改索引。
隨着collections.Counter子類:
import collections
foo = ['it', 'does', 'it', 'very', 'very', 'well']
counts = collections.Counter(foo)
result = [i for i,v in enumerate(foo) if counts[v] == 1]
print(result)
輸出:
[1, 5]
只是好奇:爲什麼你提到它是一個子類?是不是(幾乎)Python中的每個類都是一個子類? –
@EricDuminil,有時,我從文檔中引用:* Counter是一個用於計算可哈希對象的字典子類。*。 (當然,除了最頂層的ABC之外,每個班級都是一個sublcass) – RomanPerekhrest
好的,如果你指定Counter的超類,它肯定是有意義的。好的答案順便說一句。 –
這取決於那種效率您想獲得。你可以直接在列表理解,直接的和可讀的做到這一點:
欄= [指數爲指數,EL在枚舉(富)如果foo.count(EL)== 1]
如果您想使用計數器,請參閱this以瞭解相關信息。計數器
它可讀,但速度慢。注意:我沒有downvote。 –
您將得到您想要的結果。字典是Python中更快
from collections import Counter
foo = ['it', 'does', 'it', 'very', 'very', 'well']
d = dict(Counter(foo))
[i for i,v in enumerate(foo) if counts[v] == 1]
您還可以使用設置(富)
櫃檯已經有了答案。另外,這個代碼輸出唯一的單詞,而不是它們的索引。 –
你可以嘗試這樣的事情,特別是如果你FOO列表的大小比你上面的例子更大,有很多的重複。
seen = set()
[i for i,e in enumerate(foo) if not (e in seen or seen.add(e) or e in foo[i+1:])]
爲什麼近票選爲「太寬泛」?我認爲這是目標明確的問題,目前只有一個很好的答案。 – empty