【问题标题】:Compare List with different number of items将列表与不同数量的项目进行比较
【发布时间】:2014-06-20 08:35:29
【问题描述】:

我该怎么做?

A = ['fish', 'banana', 'old pajamas', 'Mutton', 'Beef', 'Trout']
B = ['fish', 'banana', 'old pajamas']

B in A = True
A in B = False

我尝试了 'in' 比较器,但它在两种情况下都返回 False,因为它正在检查列表 B 是否在列表 A 内,而不是 B 在 A 中的项目。

除了像这样使用很长的 if 语句之外,还有一种简单的方法可以做到这一点:

if B[0] == A[0] and B[1] == A[1] and B[2] == A[2]: 
    return True
else: return False

【问题讨论】:

  • 你的问题有点模棱两可,第一部分建议使用in,但第二部分建议按索引比较元素。

标签: python list comparison compare contains


【解决方案1】:
In [8]: all(a==b for a,b in zip(A,B))
Out[8]: True

等价于

if B[0] == A[0] and B[1] == A[1] and B[2] == A[2]: 
    return True
else: return False

因为zipAB 的较短者中没有更多元素时终止:

In [9]: zip(A, B)
Out[9]: [('fish', 'fish'), ('banana', 'banana'), ('old pajamas', 'old pajamas')]

另一方面,如果您希望测试A 的所有元素是否都在B 中,那么您正在寻找子集关系。如果将AB 转换为集合,则可以使用其<= 运算符:

In [12]: set(B) <= set(A)
Out[12]: True

因为BA 的子集。

In [13]: set(A) <= set(B)
Out[13]: False

因为A 不是B 的子集。


编辑:正如 Aशwini चhaudhary 指出的那样,集合也有一个 issubset method

In [42]: set(B).issubset(A)
Out[42]: True

In [43]: set(A).issubset(B)
Out[43]: False

【讨论】:

  • Set 也有 issubset 方法:set(B).issubset(A)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多