比较python中的元组列表

比较python中的元组列表,python,list,tuples,Python,List,Tuples,我有一个python元组列表,其形式为[(word,sym),(word,sym)…] 让我们假设符号是A或B。我想返回列表中包含两个元组的所有单词,格式分别为(“示例”,A)和(“示例”,B)。因此,基本上一个单词同时与A和B配对。我假设这可以通过列表理解来完成。我可以这样做来获取符号为A的所有单词: [x[0]表示self.list中的x,如果x[1]=“A”] 以类似的方式获得符号为B的单词列表,但是,我不确定如何比较这两个列表 如果列表a中的单词和列表B中的单词,我会简单地使用吗?假设顺

我有一个python元组列表,其形式为
[(word,sym),(word,sym)…]

让我们假设符号是
A
B
。我想返回列表中包含两个元组的所有单词,格式分别为
(“示例”,A)
(“示例”,B)
。因此,基本上一个单词同时与
A
B
配对。我假设这可以通过列表理解来完成。我可以这样做来获取符号为A的所有单词:

[x[0]表示self.list中的x,如果x[1]=“A”]

以类似的方式获得符号为B的单词列表,但是,我不确定如何比较这两个列表


如果列表a中的单词和列表B中的单词,我会简单地使用
吗?

假设顺序不重要,这是
集合
交叉点的一个很好的用例:

setA = {word for word, sym in self.list if sym == "A"}
setB = {word for word, sym in self.list if sym == "B"}

AB_words = setA & setB  # Preserves only those words found in both input sets
然后,如果您需要测试任何给定的单词是否是普通单词,则这是一个简单的
set
membership测试:

if word in AB_words:

是的,它工作,但它返回重复的tho。我不知道如何摆脱它们如果这个问题包含一些可以粘贴为答案一部分的有效Python形式的示例,那么回答起来就相当简单了。当然,它会有重复项,因为您正在迭代所有项目,所以它会出现两次(应该是这样的)。在列表中调用
set(list)
以消除重复项,或者用set comp代替list comp(用
{}
替换
[]
)小样式注意:将元组解包为名称比将元组保留为元组并使用匿名索引要好得多(通常更快)。因此,您对列表的理解应该是:
[逐字逐句,sym in self.list if sym==“A”]
这些名称使代码更加自我记录,而不是四处散布神奇的数字。