例如,我想检查元组
(1,2)
中的每个元素是否都在元组(1,2,3,4,5)
中。
我认为使用循环不是一个好方法,我认为可以在一行代码中完成。set.issubset
或 set.issuperset
来检查一个元组或列表中的每个元素是否都在另一个元组或列表中。>>> tuple1 = (1, 2)
>>> tuple2 = (1, 2, 3, 4, 5)
>>> set(tuple1).issubset(tuple2)
True
>>> set(tuple2).issuperset(tuple1)
True
鉴于您的问题特别针对元组/列表而不是集合,我会假设您包括元素重复且重复次数有关的情况。例如,(1, 1, 3)
在(0, 1, 1, 2, 3)
中,但(1, 1, 3, 3)
则不在其中。
import collections
def contains(l1, l2):
l1_cnt = set(collections.Counter(l1).items())
l2_cnt = set(collections.Counter(l2).items())
return l2_cnt <= l1_cnt
# contains((0, 1, 2, 3, 4, 5), (1, 2)) returns True
# contains((0, 1, 1, 2, 3), (1, 1, 3)) returns True
# contains((0, 1, 1, 2, 3), (1, 1, 3, 3)) returns False
def tuple_containment(a,b):
ans = True
for i in iter(b):
ans &= i in a
return ans
>>> tuple_containment ((1,2,3,4,5), (1,2))
True
>>> tuple_containment ((1,2,3,4,5), (2,6))
False
tuple_checker
是做什么的?检查相等性、包含性,还是只是检查它们是否为元组? - Peter Wood
slice
这样的数据结构,它只需要测试它的下界和上界 (start
,stop
和step
),你甚至不需要一个元组/集合。或者使用itertools.islice
。 - smci