이것은 작동하는 것처럼 보이며 lists 뿐만 아니라 반복 가능한 모든 것을 처리 할 수 있어야합니다 . 효율성을 극대화하기 위해 가능할 때마다 단락됩니다. Python 2와 3에서 모두 작동합니다.
def only1(iterable):
for i, x in enumerate(iterable):
if x: break
else:
return False
for x in iterable[i+1:]:
if x: return False
return True
testcases = [
[[ ], False],
[[False, False, False, False], False],
[[True, False, False, False], True],
[[False, True, False, False], True],
[[False, False, False, True], True],
[[True, False, True, False], False],
[[True, True, True, True], False],
]
for i, testcase in enumerate(testcases):
correct = only1(testcase[0]) == testcase[1]
print('only1(testcase[{}]): {}{}'.format(i, only1(testcase[0]),
'' if correct else
', error given '+str(testcase[0])))
산출:
only1(testcase[0]): False
only1(testcase[1]): False
only1(testcase[2]): True
only1(testcase[3]): True
only1(testcase[4]): True
only1(testcase[5]): False
only1(testcase[6]): False