【问题标题】:Python comparing three lists with different lengthsPython比较三个不同长度的列表
【发布时间】:2017-11-02 15:45:55
【问题描述】:

我正在尝试比较三个不同的列表,每个列表的长度可能与其他列表不同,但我不确定如何执行此操作。最初我想只获得最大的列表长度,但后来意识到如果其他列表长度较小,那么它将尝试查找空元素并返回错误。 我正在尝试查找所有列表是否具有共同元素

目前我有:

for i in range(n) //n is largest list length
    if (listA[i] in listB) and (listA[i] in listC):
        common = True
    else:
        common = False

如果可能,您能否给出一个可以应用于多个列表而不是仅限于三个列表的答案

【问题讨论】:

  • 在 Python 中为 cmets 使用 #...而且你在 for 循环的末尾缺少一个冒号
  • 集合比列表更适合这个。集合提供issubset (<=) 和intersection (&) 等方法。
  • 向我们展示一些您将要处理的示例数据
  • @DavidG yeh 很抱歉使用了不同语言的 cmets
  • @Gerhard 我有 3 个来自用户的字符串输入,通过将其转换为列表将其分成单独的字符。然后它检查所有三个字符中的字符。 E.G john, jake, james 会找到 j 并返回 true

标签: python list compare


【解决方案1】:

您可以使用集合交集获取所有 3 个列表的所有常见元素:

intersection = set(listA) & set(listB) & set(listC)
common = bool(intersection)  # True if not empty

循环中两个列表的包含检查具有时间复杂度O(A*(B+C))(二次)。这是O(A+B+C)(线性)。

如果整个路口的信息比您需要的多,您仍然可以执行以下操作并从提前休息中受益:

setBC = set(listB) & set(listC)
common = any(x in setBC for x in listA)

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2021-02-25
    • 2021-03-18
    • 2018-07-03
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2023-01-13
    相关资源
    最近更新 更多