Какой из этих 2 кодов более эффективен? - PullRequest
0 голосов
/ 08 июня 2019

Я новичок в изучении Python и программировании в целом, и мне интересно, какой из этих двух кодов более эффективен для решения следующей проблемы:

Напишите программу для удаления дубликатов в существующем списке.

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

  1. Мой код:
List = [5,2,9,1,7,2,2,3,9]
for item in List:
    while(List.count(item) >= 2):
        List.remove(item)
print(List)
Второй код:
List = [5,2,9,1,7,2,2,3,9]
New_List = []
for item in List:
    if item not in New_List:
       New_List.append(item)
print(New_List)

Оба работают нормально, и вопрос не говорит о том, что вы не можете хранить данные в другой переменной как список, какой код в целом более эффективен?

1 Ответ

1 голос
/ 08 июня 2019

Определенно второй по нескольким причинам:

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

Следовательно, в нотации O у вас есть следующие способы масштабирования:

  • первый: вычисление: O (n ^ 2); Пробел: O (n), а точнее 2 * n
  • секунда: Вычисление: O (n), Пробел: O (n), а точнее 3 * n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...