Поиск повторений при вычислении элементов списка

#python #performance

#python #Производительность

Вопрос:

Мне нужно знать, существует ли алгоритм для поиска первого повторяющегося подмножества в списке целых чисел при вычислении указанного списка. Например, учитывая функцию, которая выводит в для таких элементов, как

 1
2
3
1
2
3
  

Я хотел бы иметь возможность прерываться при первом появлении повторения, оставляя только с

 [1,2,3]
  

Причина в том, что я не хочу вычислять весь список по соображениям производительности.
Есть ли какой-нибудь способ? Спасибо!

Ответ №1:

Я написал для вас пример кода:

Код:

 nums = [1, 2, 3, 1, 2, 3]
result = []
for num in nums:
    if num in result:
        break  # Break the iteration if the element already exists in the result list
    result.append(num)

print("Result: {}".format(result))
  

Вывод:

 >>> python3 test.py 
Result: [1, 2, 3]
  

Ответ №2:

Альтернатива решению @milanbalazs, которое не будет останавливаться на отдельных повторяющихся элементах, а на повторяющихся последовательностях:

 nums = [1,2,3,1,1,2,3,1]
result = []
for i, num in enumerate(nums):
    if result and result == nums[i:i len(result)]:
        print(f'Found repetition: {result}')
        # Break the iteration when the sequence in result is the same
        # as the upcoming sequence in nums
        break 
    result.append(num)

print(f'Result: {result}')
  

Вывод

 Found repetition: [1, 2, 3, 1]
Result: [1, 2, 3, 1]
  

Комментарии:

1. Тьфу! Я должен был упомянуть, что у меня есть повторяющиеся числа, которые являются частью списка…