【问题标题】:comparing a list of tuples python比较元组python的列表
【发布时间】:2015-11-11 00:33:39
【问题描述】:

我有一个[(word, sym) , (word, sym)....] 形式的python 元组列表。

假设符号是AB。我想返回列表中包含("example", A)("example", B) 形式的两个元组的所有单词。所以基本上一个词与AB 都配对。我假设这可以使用列表理解来完成。我可以这样做来获取符号为 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"] 这些名称使代码更具自我记录性,而不是到处散布魔术数字。

标签: python list tuples


【解决方案1】:

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

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 成员资格测试:

if word in AB_words:

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多