我有两个列表
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']
您可以提出修改建议吗?
只需制作
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
中删除重复项并保持顺序
这是旧的 af,但是,如果有人仍然想知道它,谷歌搜索一下给了我这个非常简单的解决方案。
x = [1, 2, 6, 8, 2, 3]
y = [2, 6]
sorted(set(x) - set(y), key=x.index)
输出 -> [1, 8, 3]
您应该仔细查看
l
并仅当其中的每个元素不在 l_match
中时才将其包含在结果数组中。这将保留订单。在Python中,该语句是一行:
print [entry for entry in l if entry not in l_match]
这个怎么样:如何从列表中删除重复项,同时保持顺序?
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))])
尝试使用 filter():
result = list(filter(lambda c: c not in l_match, l))