【问题标题】:Python Compare item from list of list by Issubset or other methodPython通过Issubset或其他方法比较列表中的项目
【发布时间】:2018-11-29 04:41:28
【问题描述】:

我想查看一个列表列表(列表 A)中的所有项目是否出现在另一个列表列表(列表 B - 完整列表)中,然后将返回 true 或 false 保存到列表中。

例如,下面是两个列表(list of list)

List A : [ [1,2],[3,4],[8,9] ]

List B : [ [1,2,3,4], [5,6,7],[8,10] ]

预期结果

 Result List : [[True,False,False]

【问题讨论】:

  • 你能用正确的语法解释你的结果吗?

标签: python python-3.x arraylist


【解决方案1】:

您可以使用以下代码:

A = [ [1,2],[3,4],[8,9] ]
B = [ [1,2,3,4], [5,6,7],[8,10] ]
result = []
for x,y in zip(A, B):
    if all(e in y for e in x):
        result.append(True)
    else:
        result.append(False)

生成如下列表:

[True, False, False]

代码使用zip() 函数将两个列表中的对应项配对在一起。

另外,all(e in y for e in x) 行是代码的基本部分。它检查 A 的第一个子列表中的 所有 元素是否在第一个子列表 B 中,依此类推。

【讨论】:

    【解决方案2】:

    您可以在set 上使用zip()issubset() 方法,如下所示:

    [True if set(x).issubset(set(y)) else False for x,y in zip(a,b)]
    

    性能方面,我认为这并不比 ammar 的答案更好。但这是一条线;-)

    【讨论】:

      【解决方案3】:

      试试list-comprehensionzip

      a = [ [1,2],[3,4],[8,9] ]
      
      b = [ [1,2,3,4], [5,6,7],[8,10] ]
      
      result = [True if set(i[0]).issubset(set(i[1])) else False for i in zip(a,b) ]
      print(result)
      

      输出:

      C:\Users\Desktop>py x.py
      [True, False, False]
      

      【讨论】:

        【解决方案4】:

        使用issubset()

        A = [[1,2],[3,4],[8,9]]
        B = [[1,2,3,4], [5,6,7],[8,10]]
        result = [True if set(i[0]).issubset(i[1]) else False for i in list(zip(A,B))]
        print(result)
        # 158 µs ± 14.7 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
        

        输出:

        [True, False, False]
        

        【讨论】:

          猜你喜欢
          • 2021-03-12
          • 1970-01-01
          • 2022-07-22
          • 1970-01-01
          • 2018-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多