问题
I have two lists l
and l_match
. l_match
is an empty list.
l = ['gtttaattgagttgtcatatgttaataacg',
'tttaattgagttgtcatatgttaataacgg',
'ttaattgagttgtcatatgttaataacggt',
'taattgagttgtcatatgttaataacggta',
'aattgagttgtcatatgttaataacggtat']
l_match = []
print list(set(l) - set(l_match))
gives the output
['aattgagttgtcatatgttaataacggtat',
'tttaattgagttgtcatatgttaataacgg',
'ttaattgagttgtcatatgttaataacggt',
'taattgagttgtcatatgttaataacggta',
'gtttaattgagttgtcatatgttaataacg']
I want the output the same order as the input. i.e. in the above case the output should be
['gtttaattgagttgtcatatgttaataacg',
'tttaattgagttgtcatatgttaataacgg',
'ttaattgagttgtcatatgttaataacggt',
'taattgagttgtcatatgttaataacggta',
'aattgagttgtcatatgttaataacggtat']
Can you suggest edits?
回答1:
Just make l_match
a set:
l_match = []
st = set(l_match)
print([ele for ele in l if ele not in st])
If l
can have dupes use an OrderedDict to get unique values from l
:
from collections import OrderedDict
print([ele for ele in OrderedDict.fromkeys(l) if ele not in st])
Obviously l_match
would contain values in the real world or a simple l[:] = OrderedDict.fromkeys(l)
would suffice to remove dupes from l
and keep the order
回答2:
You should look through l
and include each element therein in your result array only if it's not in l_match
. This will preserve the order. In python, the statement is a single line:
print [entry for entry in l if entry not in l_match]
回答3:
What about this: 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))])
来源:https://stackoverflow.com/questions/32384312/preserving-the-order-in-difference-between-two-lists