我有一个列表:
a = [1, 2, 6, 4, 3, 5, 7]
请告诉我如何检查列表中元素是否仅出现一次?
同时,请解释一下是否所有从1到len(a)
的元素都在列表中。例如,在列表'a'中,元素从1到7都在列表中,但是如果列表为b = [1, 4, 3, 5]
,则并非所有从1到4的元素都在列表中。
谢谢!
我有一个列表:
a = [1, 2, 6, 4, 3, 5, 7]
请告诉我如何检查列表中元素是否仅出现一次?
同时,请解释一下是否所有从1到len(a)
的元素都在列表中。例如,在列表'a'中,元素从1到7都在列表中,但是如果列表为b = [1, 4, 3, 5]
,则并非所有从1到4的元素都在列表中。
谢谢!
def occurs_once(a, item):
return a.count(item) == 1
只有当item
在列表中恰好出现一次时,才会为真。
第二个问题请参见Pokes的答案。
range(1,n+1)
中的每个元素是否在 a
中。 - Herman Schaafrange
是新版本 Python 中的生成器。 - pokea = [1, 2, ..., len(a)]
中有另一个数字,则必须包含1到len(a)
之间每个数字的一个副本,否则它就不符合要求。我的方法是错误的,因为没有检查最小值和最大值。例如,[0, 1, 2, 7]
总和为7,并且在没有检查的情况下击败了我的测试。 - aaronasterlinglen( set( a ) ) == len( a )
( len( set( a ) ) == len( a ) == max( a ) ) and min( a ) == 1
对于第二个问题。
a
中的所有元素都是整数。 - jfs对于您的第一个问题,如果您的元素是可哈希的,您可以创建一个包含这些元素的集合并检查其长度:
len(set(a)) == len(a)
如果结果为False,您可以使用此函数,它可以比上面的函数提供更好的性能(但当结果为True时性能较差):
def are_all_elements_unique(l):
seen = set()
for x in l:
if x in seen:
return False
seen.add(x)
return True
对于第二个问题,您可能需要检查一下
sorted(a) == range(1, len(a) + 1)
我理解您希望得到类似以下内容的帮助:
[x for x in a if a.count(x) == 1]