Python 如何检查我的列表中是否只有2个可以重复的特定元素?
如何检查我的列表中是否只有2个可以重复的特定元素 例如: 我希望列表中的有效元素只有2个:Python 如何检查我的列表中是否只有2个可以重复的特定元素?,python,python-2.7,Python,Python 2.7,如何检查我的列表中是否只有2个可以重复的特定元素 例如: 我希望列表中的有效元素只有2个: 1. abstract.f 2. None 若列表有任何其他元素,那个么它应该抛出一条错误消息 list1 = ['abstract.f', None, None, 'abstract.f'] # This is a valid list as it doesn't have any other element than 2 of above. list1 = ['abstract.f', None,
1. abstract.f
2. None
若列表有任何其他元素,那个么它应该抛出一条错误消息
list1 = ['abstract.f', None, None, 'abstract.f']
# This is a valid list as it doesn't have any other element than 2 of above.
list1 = ['abstract.f', None, 'xyz']
# This is invalid list as it has 'xyz' which is not expected.
您可以使用
all
输出布尔值:
# Put items considered valid in this list
valid = ['abstract.f', None]
list1 = ['abstract.f', None, None, 'abstract.f']
print(all(el in valid for el in list1)) # True
list1 = ['abstract.f', None, 'xyz']
print(all(el in valid for el in list1)) # False
也可以使用
set
逻辑来实现此目的:
>>> valid = {'abstract.f', None}
>>> list1 = ['abstract.f', None, None, 'abstract.f']
>>> list2 = ['abstract.f', None, 'xyz']
>>> set(list1) <= valid
True
>>> set(list2) <= valid
False
>valid={'abstract.f',None}
>>>列表1=['abstract.f',无,无,'abstract.f']
>>>列表2=['abstract.f',无,'xyz']
>>>set(list1)>>set(list2)还可以检查匹配列表元素的数量与列表的长度。例如:
result = list1.count(None) + list1.count('abstract.f') == len(list1)
如果列表中只有您指定的元素,则返回True
要将想法扩展到更大的案例中,请执行以下操作:
valid = [None,'abstract.f']
results = sum([list1.count(word) for word in valid])==len(list1)
换言之,您可以检查列表中的元素集合是否是有效元素集合的子集。Python内置了这种抽象:
set(list1) <= {None, 'abstract.f'} # operator syntax
set(list1).issubset({None, 'abstract.f'}) # method syntax
set(list1)我先尝试了list1
,然后在for
中尝试了valid
,谢谢您的纠正!如果目标是引发异常,则在此处添加:如果不是全部(列表1中el的[valid]中的el):raise VALUERROR(“不可接受的值”)
此处只需注意空列表返回true@StephenMason从数学上讲,一个空列表可以满足它,条件是。@Tomothy32我以前从未见过这个术语,很有趣!