В случае, если это полезно, вот версия, которая начнется с создания списка уникальных значений и индексов, в которых они встречаются, перед проверкой того, действительно ли список состоит из ряда общих значений и single «odd one out», и если да, то укажите индекс нечетного.
Я не смог найти лаконичного способа сделать это. Не помогло то, что элементы списка не являются хэшируемыми объектами, поэтому было невозможно использовать наборы.
list = [['a'], ['a'], ['a'], ['b'], ['a'], ['a'], ['a']]
# build up a list of 2-tuples of each containing
# (unique value, list indices where this value occurs)
unique_values_and_indices = []
for index, element in enumerate(list):
for value_and_indices in unique_values_and_indices:
if element == value_and_indices[0]:
value_and_indices[1].append(index)
break
else:
unique_values_and_indices.append((element, [index]))
# sort these 2-tuples in order of increasing number of indices
unique_values_and_indices.sort(
key=lambda value_and_indices: len(value_and_indices[1]))
# check that we have two unique values, one of which occurs at exactly
# one index, and the other of which occurs at more than one index
if (len(unique_values_and_indices) == 2
and len(unique_values_and_indices[0][1]) == 1
and len(unique_values_and_indices[1][1]) > 1):
print("the odd one out occurs at index {}"
.format(unique_values_and_indices[0][1][0]))
# # uncomment the following statement for some additional info
# # beyond what was strictly asked in the question
#
# print("the common value is {}, and the odd one out is {}"
# .format(unique_values_and_indices[1][0],
# unique_values_and_indices[0][0]))
else:
print("the assumptions were not valid")