Как эффективно пройтись по массиву чисел в Python?

Я пытаюсь сделать более эффективный метод обхода массива чисел и поиска пропущенного числа. У меня есть массив чисел от 1 до 20, но одно отсутствует, и числа расположены не в хронологическом порядке (они перемешаны):

array = [16, 11, 4, 6, 14, 8, 5, 13, 10, 2, 9, 15, 3, 18, 20, 12, 19, 7, 1]

Метод, о котором я думал, таков:

for x in range(1, len(array) + 1):
    if x not in array:
        print(x)

Проблема этого метода в том, что он медленный и неэффективный, и если мне нужно проанализировать очень большой массив (с тысячами чисел), это займет много времени.


person E. Epstein    schedule 23.03.2018    source источник


Ответы (1)


Вы можете найти set.difference

>>> set(range(1, 21)).difference(array)
{17}
person Cory Kramer    schedule 23.03.2018
comment
вопрос выглядит как дубликат stackoverflow.com/questions/20718315/, но ни в одном ответе не упоминается метод set. - person Jean-François Fabre; 23.03.2018
comment
@Jean-FrançoisFabre Достойная цель для обмана, но в этом случае исходный список отсортирован; также по крайней мере в 1 ответе используются наборы stackoverflow.com/a/34045983/6260170 - person Chris_Rands; 23.03.2018
comment
хорошо, поэтому вопрос соответствует, и тот же ответ применим. Дуп это. Кори, держи репутацию, ответ хороший. - person Jean-François Fabre; 23.03.2018