我正在尝试过滤掉包含术语" 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程序员。
感谢。
答案 0 :(得分:1)
你是对的,使用zip()
是解决这个问题的好方法。
基本上,它可以采用三个列表并同时遍历每个第n个元素,因此这在这里非常有用。
当它返回元组列表时,您可以对其进行过滤以保留元组,其中第一个值(来自Openmarket
的元素)不包含FX
。来自someotherlist
和someotherotherlist
的元素会同时被过滤。
最后,你可以通过"解压缩"来取回你的初始名单。由于打开包装,元组列表。
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)