#python #numbers #sieve
#python #числа #сито
Вопрос:
Для тех, кто интересуется; счастливые числа генерируются путем исключения чисел на основе их положения в наборе. то есть:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
Первое устраняет каждое второе число, поскольку второе значение равно 2:
1,3,5,7,9,11,13,15,17,19,21
Первое оставшееся число в списке после 1 равно 3; таким образом, исключается каждое третье число:
1,3,7,9,13,15,17,19,21
Следующее число — 7; исключите каждое 7-е число в списке:
1,3,7,9,13,15,21
Следующий выживший nunmber после 7 равен 9, но, очевидно, их недостаточно для устранения.
Для получения дополнительной информации вы можете проверить счастливое число
Итак, если мой список не содержит отрицательного числа и начинается с 1, т.е.:
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22']
Мой код должен удалять каждое число, если только это не счастливое число, поэтому я попытался:
def lucky_numbers(numbers):
del numbers[::-2] # Delete even numbers
while int(numbers[1]) < len(numbers):
x = int(numbers[1])
del numbers[-1::x]
print(numbers)
return
return
lucky_numbers(numbers)
Но он возвращает:
['1', '3', '5', '7', '9', '11', '13', '15', '17', '19']
Где я ошибаюсь? Или есть какой-нибудь эффективный способ написать это? Спасибо.
Комментарии:
1.
1,3,7,9,13,15,17,19,21
разве второе число не равно 3? так не следует ли снова удалять каждый 3-й элемент?2. Он переходит к следующему оставшемуся числу. «Продолжает удаление n-го оставшихся чисел, где n — следующее число в списке после последнего оставшегося числа». Так что это как 2-й, 3-й, 7-й, 9-й, 13-й…
Ответ №1:
Отрицательный индекс немного сбивает меня с толку (по крайней мере), посмотрите, легко ли интерпретировать этот код-
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22']
def lucky_numbers(numbers):
index = 1
next_freq = int(numbers[index])
while int(next_freq) < len(numbers):
del numbers[next_freq-1::next_freq]
print(numbers)
if str(next_freq) in numbers:
index = 1
next_freq = int(numbers[index])
else:
next_freq = int(numbers[index])
return
lucky_numbers(numbers)
['1', '3', '5', '7', '9', '11', '13', '15', '17', '19', '21']
['1', '3', '7', '9', '13', '15', '19', '21']
['1', '3', '7', '9', '13', '15', '21']
Комментарии:
1. Хорошо, теперь я вижу свою ошибку. По оценкам, я слишком много думал об этом. Большое вам спасибо, ценю это.