保留python中两个列表之间差异的顺序

时间:2015-09-03 19:51:38

标签: python arrays list

我有两个列表ll_matchl_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']

你能建议编辑吗?

3 个答案:

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