我有一个像这样的场景:
mainList = [[9,5],[17,3],[23,1],[9,2]]
secondaryList = [9,12,28,23,1,6,95]
myNewList = []
myNewList.append([[a,b] for a,b in mainList if a in secondaryList])
这个,请回复我:
myNewList = [[9,5],[23,1],[9,2]]
但我只需要" a"的第一个发现。换句话说,我需要获得:
myNewList = [[9,5],[23,1]]
我怎样才能做到这一点?
答案 0 :(得分:2)
首先:
myNewList = []
myNewList.append([[a,b] for a,b in mainList if a in secondaryList])
与
完全相同myNewList = [[a,b] for a,b in mainList if a in secondaryList]
然后:
你正在构建的是功能上的python字典。 mainList
中的两个元素列表与dict.items()
相同!
所以你要做的就是从dict
中构建一个mainList
(反转它,因为通常,你只需保存 last ,不是第一次出现):
mainDict = dict([reversed(mainList)])
然后你只需要制作新名单:
myNewList = [ (key, mainDict[key]) for key in secondaryList ]
答案 1 :(得分:1)
您可以使用一个集来存储第一个元素,然后在添加子列表之前检查现有的第一个元素:
>>> seen=set()
>>> l=[]
>>> for i,j in mainList:
... if i in secondaryList and i not in seen:
... seen.add(i)
... l.append([i,j])
...
>>> l
[[9, 5], [23, 1]]
或者您可以使用collections.defaultdict
和deque
指定其maxlen
。但请注意,如果您想要{{1}的第一个遮挡,则需要从头到尾遍历您的列表1}}因为a
将保留最后一个插入值:
deque