3

我有两个列表ll_match. l_match是一个空列表。

l = ['gtttaattgagttgtcatatgttaataacg',
     'tttaattgagttgtcatatgttaataacgg',
     'ttaattgagttgtcatatgttaataacggt',
     'taattgagttgtcatatgttaataacggta',
     'aattgagttgtcatatgttaataacggtat']

l_match = []

print list(set(l) - set(l_match))

给出输出

['aattgagttgtcatatgttaataacggtat',
 'tttaattgagttgtcatatgttaataacgg',
 'ttaattgagttgtcatatgttaataacggt',
 'taattgagttgtcatatgttaataacggta',
 'gtttaattgagttgtcatatgttaataacg']

我希望输出与输入的顺序相同。即在上述情况下,输出应该是

['gtttaattgagttgtcatatgttaataacg',
 'tttaattgagttgtcatatgttaataacgg',
 'ttaattgagttgtcatatgttaataacggt',
 'taattgagttgtcatatgttaataacggta',
 'aattgagttgtcatatgttaataacggtat']

你能建议编辑吗?

4

3 回答 3

2

l_match一套:

l_match = []

st =  set(l_match)

print([ele for ele in l if ele not in st])

如果l可以让骗子使用 OrderedDict 从以下位置获取唯一值l

from collections import OrderedDict
print([ele for ele in OrderedDict.fromkeys(l) if ele not in st])

显然l_match将包含现实世界中的值,或者一个简单的 l[:] = OrderedDict.fromkeys(l)就足以消除欺骗l并保持顺序

于 2015-09-03T19:57:04.810 回答
0

只有l当它不在l_match. 这将保留订单。在 python 中,语句是一行:

print [entry for entry in l if entry not in l_match]
于 2015-09-03T20:00:27.067 回答
0

怎么样:如何在保持顺序的同时从列表中删除重复项?

l = ['gtttaattgagttgtcatatgttaataacg', 'tttaattgagttgtcatatgttaataacgg', 'ttaattgagttgtcatatgttaataacggt', 'taattgagttgtcatatgttaataacggta', 'aattgagttgtcatatgttaataacggtat']
seen = set()
seen_add = seen.add
print([ x for x in l if not (x in seen or seen_add(x))])
于 2015-09-03T20:03:57.097 回答