Проблема выбора элемента из списка в цикле

#python #arrays #list #loops

Вопрос:

 def counter(x) :  counter_list = []  for i in range(2 , int(x**0.5)   1) :  if x % i == 0 :  counter_list.append(i)  return counter_list  

counter() проверьте счетчик любого числа и верните счетчики в виде списка

 counter_list = counter(600851475143) print(counter_list)  

я получаю счетчики 600851475143 и хочу разделить простые числа

 for x in counter_list :  #-----104441 is counter of 600851475143 but when But it is not placed in loop equal to the variable x, in other words, it is not read at all  print("..////////////////////////////////////////////" , x)  print(104441 in counter_list)  for i in range(2 , int(x**0.5)   1) :   if x % i == 0 :  counter_list.remove(x)  

Моя проблема в том, что номер 104441 есть в списке, но он не считывается, когда используется в цикле

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

1. Не удаляйте вещи из списка, который вы сейчас просматриваете. повторите копирование

Ответ №1:

Вы зацикливаетесь counter_list и удаляете значения из этого списка в цикле, вы не должны этого делать.

Делать:

 gt;gt;gt; def counter(x) : gt;gt;gt; counter_list = [] gt;gt;gt; for i in range(2 , int(x**0.5)   1) : gt;gt;gt; if x % i == 0 : gt;gt;gt; counter_list.append(i) gt;gt;gt; return counter_list gt;gt;gt; counter_list = counter(600851475143) gt;gt;gt; to_remove = [] gt;gt;gt; for x in counter_list : gt;gt;gt; for i in range(2 , int(x**0.5)   1) : gt;gt;gt; if x % i == 0 : gt;gt;gt; to_remove.append(x) gt;gt;gt; for i in to_remove: gt;gt;gt; counter_list.remove(x) gt;gt;gt; counter_list [71, 839, 1471, 6857]  

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

1. Интересная идея, спасибо

Ответ №2:

Попробуйте создать копию своего списка. Если вы этого не сделаете, вы измените список, который повторяете. Это приведет к неправильному поведению цикла.

 # create a copy of your list copy_counter_list = counter_list.copy()  for x in counter_list :  #-----104441 is counter of 600851475143 but when But it is not placed in loop equal to the variable x, in other words, it is not read at all  print("..////////////////////////////////////////////" , x)  print(104441 in counter_list)  for i in range(2 , int(x**0.5)   1) :   if x % i == 0 :  copy_counter_list.remove(x)  

Тогда ваш результат будет copy_counter_list достигнут .

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

1. Моя проблема решена, спасибо за помощь

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