2015-08-26 43 views
2

我有一個用~100個名字填充的列表。這個列表中的名字要麼出現一次或兩次,我想通過列表來查找出現兩次的名字和僅出現的名字一次。我還需要列表中重複出現的名字的位置以及僅出現一次的名字的位置。如何在列表中找到Python中相同的2個項目

我不知道我會如何去做這件事,因爲我所能想到的所有方法都是低效的,因爲即使他們已經找到了匹配項,他們也會瀏覽整個列表。我能想到的其他方法會返回兩個重複位置。出現兩次的名字不一定會彼此相鄰。

例如,如果這是列表:

mylist = [ 1, 2, 3, 1, 4, 4, 5, 6] 

我需要的東西,輸出(類似):

[[0,3],[1],[2],[4,5],[6],[7]] 

隨着這些數字是重複的名稱和的位置發生一次的名字的位置。

我絕不是一個專家,所以任何幫助,將不勝感激。

+0

'從收藏導入defaultdict; new = defaultdict()'然後'爲i,j在枚舉(myList)中:q [j] .append(i)' –

回答

1

我會用一本字典:

mylist = [1,2,3,1,4,4,5,6] 
dic = {} 

for i in range(0,len(mylist)): 
    if mylist[i] in dic: 
     dic[mylist[i]].append(i) 
    else: 
     dic[mylist[i]] = [i] 
print dic.values() 
# prints [[0, 3], [1], [2], [4, 5], [6], [7]] 
4

您可以使用enumerate來獲取對包含每個元素和元素本身,然後在它循環的索引和存儲項目爲重點和指標作爲使用collections.OrderedDict(維護秩序)和dict.setdefault方法值:

>>> from collections import OrderedDict 
>>> d=OrderedDict() 
>>> for i,j in enumerate(mylist): 
...  d.setdefault(j,[]).append(i) 
... 

>>> d.values() 
[[0, 3], [1], [2], [4, 5], [6], [7]] 
相關問題