Python 如何检查我的列表中是否只有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,

如何检查我的列表中是否只有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, '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我以前从未见过这个术语,很有趣!