删除python中列表中的字符串重复项

时间:2016-07-10 15:14:55

标签: python python-3.x bioinformatics

我的代码中有一个问题,我有以下内容:

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等的内容感到抱歉。

4 个答案:

答案 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']