2016-07-10 32 views
-1

我在我的代碼中的問題,我有以下幾點:去除串重複在一個列表在python

import random 
Probabilities={'AA':0.2,"TT":0.2, "GG":0.1, "CC":0.1, "AT":0.4} 
lst=[] 
klist=[] 
for i in Probabilities: 
    lst.append(Probabilities[i]) 
lst.sort() 
for i in lst: 
    for j in Probabilities: 
     if Probabilities[j]==i: 
      klist.append(j) 
jist=list(set(klist)) 
#klist.append(i) 
cist=[] 
cist.append(lst[0]) 
for i in range(1,len(lst)): 
    k=lst[i]+cist[i-1] 
    cist.append(k) 
p=random.uniform(0, 1) 
print (p) 
print(lst) 
print(cist) 
print(klist) 
print (jist) 

當我運行此我得到的東西像

0.9939409413693211 

[0.1, 0.1, 0.2, 0.2, 0.4] 

[0.1, 0.2, 0.4, 0.6000000000000001, 1.0] 

['CC', 'GG', 'CC', 'GG', 'TT', 'AA', 'TT', 'AA', 'AT'] 

['TT', 'AT', 'CC', 'AA', 'GG'] 

我需要的零件修改是將最後一個列表打印到不僅刪除重複項,而且保留以前列表的順序

所以基本上不用

['TT', 'AT', 'CC', 'AA', 'GG'] 

我想

['CC', 'GG','TT', 'AA','AT'] 

當我做

jist=list(set(klist)) 

感謝, 一個

PS。我是Stack Overflow的新手,對於任何我可能沒有做出明確/不正確的行爲的人來說都很抱歉,等等。

回答

0

你可以在保留命令的同時使用Python的set()來跟蹤已經看到的列表中的元素。

def removeDups(list): 
    seen = set() 
    newList = [] 
    for item in list: 
     if item not in seen: 
      seen.add(item) 
      newList.append(item) 
    return newList 
1

jlist排序使用由Probabilities定義的鍵。在這種情況下,你想,關鍵是東西這樣的效果:

def strange_key(term): 
    return Probabilities[term] 

然後你就可以排序使用鍵如下:

jlist.sort(key=strange_key) 
jlist 
>>> ['CC', 'GG', 'TT', 'AA', 'AT'] 

的關鍵需求是返回某個值的函數給定的術語。既然你已經有了這個字典,你就設置好了。這可以讓你在臨時中做其他操作(你可能不需要),只需在最後進行排序即可。

0

嘗試使用字典來查看您已添加到列表中的哪些元素,並僅添加尚未附加的項目。我認爲這會做你想要的。

import random 

Probabilities={'AA':0.2,"TT":0.2, "GG":0.1, "CC":0.1, "AT":0.4} 

lst=[] 
klist=[] 

for i in Probabilities: 
    lst.append(Probabilities[i]) 

lst.sort() 

for i in lst: 
    for j in Probabilities: 
     if Probabilities[j]==i: 
      klist.append(j) 

#jist=list(set(klist)) 
jist=[] 
uniq = {} 
for i in klist: 
    # Check if we've seen i yet 
    if i not in uniq: 
     # Mark i as having been seen so we don't add it later 
     uniq[i] = True 
     jist.append(i) 

cist=[] 
cist.append(lst[0]) 
for i in range(1,len(lst)): 
    k=lst[i]+cist[i-1] 
    cist.append(k) 
p=random.uniform(0, 1) 

print (p) 
print(lst) 
print(cist) 
print(klist) 
print (jist) 
0

您可以使用collections.OrderedDict的鍵:

In [90]: from collections import OrderedDict 

In [91]: klist 
Out[91]: ['CC', 'GG', 'CC', 'GG', 'TT', 'AA', 'TT', 'AA', 'AT'] 

In [92]: jist = list(OrderedDict.fromkeys(klist)) 

In [93]: jist 
Out[93]: ['CC', 'GG', 'TT', 'AA', 'AT']