过滤python列表,同时将未过滤的术语与其他列表耦合。

时间:2015-11-17 11:09:59

标签: python list filter lambda

我正在尝试过滤掉包含术语" FX"的列表中的项目。使用过滤功能和lambda。这很好用:

MarketnoFX=list(filter(lambda x: "FX" not in x, Openmarket))

但是,此列表需要与另外两个包含数值的列表相关联,因此,如果从该列表中省略第x个术语(通过创建新列表),则必须从其他2个列表中省略该列表。我通常会简单地使用列表推导。

Openmarket=[someitems]
coupled1=[]
coupled2=[]

    for item in Openmarket:
        if "FX" in item:
            pass
        else:
            someotherlist.append(item)
            k=Openmarket.index(entry)
            someotherotherlist.append(coupled1[k])

然而,这样做并没有产生正确的结果,并且在打印包含" FX"的项目的索引时,我得到例如它显示它正在找到第12和第33项两次,第71个任期只有一次。

过滤功能似乎是一种更优雅的做事方式,但如何将其与其他列表相结合?我已经阅读过有关zip功能的内容,但我不知道如何在这里应用它。我不是一个非常有经验的Python程序员。

感谢。

1 个答案:

答案 0 :(得分:1)

你是对的,使用zip()是解决这个问题的好方法。

基本上,它可以采用三个列表并同时遍历每个第n个元素,因此这在这里非常有用。

当它返回元组列表时,您可以对其进行过滤以保留元组,其中第一个值(来自Openmarket的元素)不包含FX。来自someotherlistsomeotherotherlist的元素会同时被过滤。

最后,你可以通过"解压缩"来取回你的初始名单。由于打开包装,元组列表。

Python 2

zipped = zip(Openmarket, someotherlist, someotherotherlist)
filtered = filter(lambda (a, b, c): "FX" not in a, zipped)
Openmarket, someotherlist, someotherotherlist = zip(*filtered)

Python 3

zipped = list(zip(Openmarket, someotherlist, someotherotherlist))
filtered = list(filter(lambda elems: "FX" not in elems[0], zipped))
Openmarket, someotherlist, someotherotherlist = zip(*filtered)