【发布时间】:2015-11-11 00:33:39
【问题描述】:
我有一个[(word, sym) , (word, sym)....] 形式的python 元组列表。
假设符号是A 或B。我想返回列表中包含("example", A) 和("example", B) 形式的两个元组的所有单词。所以基本上一个词与A 和B 都配对。我假设这可以使用列表理解来完成。我可以这样做来获取符号为 A 的所有单词:
[x[0] for x in self.list if x[1] == "A"]
并以类似的方式获取符号为 B 的单词列表,但是,我不确定如何比较这两个列表。
我可以直接使用if word in listA and word in listB吗?
【问题讨论】:
-
是的,它可以工作,但它会返回重复项。我不知道如何摆脱它们
-
如果问题包含一些可以作为答案的一部分粘贴的有效 Python 形式的示例,这将是相当简单的回答。
-
当然它会有重复,因为您正在遍历所有项目,因此它会出现两次(应该如此)。调用列表上的
set(list)以消除重复项,或进行集合组合而不是列表组合(将[]替换为{}) -
次要风格注释:将元组解包为名称要好得多(通常更快),而不是将它们保留为元组并使用匿名索引。因此,您的列表理解将是:
[word for word, sym in self.list if sym == "A"]这些名称使代码更具自我记录性,而不是到处散布魔术数字。