Python 3.4:如果条件存在,则向列表添加值

时间:2015-03-29 13:42:14

标签: list python-3.x append

我有一个像这样的场景:

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]]

我怎样才能做到这一点?

2 个答案:

答案 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.defaultdictdeque指定其maxlen。但请注意,如果您想要{{1}的第一个遮挡,则需要从头到尾遍历您的列表1}}因为a将保留最后一个插入值:

deque