我有两个列表l
和l_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']
你能建议编辑吗?
答案 0 :(得分: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
删除欺骗并保留顺序
答案 1 :(得分:0)
您应该查看l
并将结果数组中的每个元素包括在l_match
中。这将保留订单。在python中,语句是一行:
print [entry for entry in l if entry not in l_match]
答案 2 :(得分:0)
这个怎么样:How do you remove duplicates from a list in whilst preserving order?
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))])