#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. Приятно слышать 🙂 Если это решило вашу проблему, вы можете принять ответ с серой галочкой рядом с ответом, чтобы он стал зеленым.