我的代码中有一个问题,我有以下内容:
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的新手,对于任何我可能没有明确/不正确的etiqutte等的内容感到抱歉。
答案 0 :(得分:1)
使用jlist
定义的键对Probabilities
进行排序。在这种情况下,您想要的键是这样的:
def strange_key(term):
return Probabilities[term]
然后您可以按如下方式使用键进行排序:
jlist.sort(key=strange_key)
jlist
>>> ['CC', 'GG', 'TT', 'AA', 'AT']
密钥需要是一个为给定术语返回一些值的函数。既然你已经有了这个词典,那你就定了。这允许你在过渡期间(你可能不需要)进行其他操作,并在最后排序。
答案 1 :(得分: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
答案 2 :(得分: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)
答案 3 :(得分: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']