Как изменить последовательность (не диапазон) в цикле for? - PullRequest
2 голосов
/ 17 июня 2019

Я просто хочу получить список простых чисел, но я обнаружил, что цикл for больше раз, чем я представляю, похоже, что последовательность не меняется, даже если я изменил переменную с тем же именем.

Я пытаюсь назвать nums глобальными, но ничего не изменилось.

nums = list(range(2, 11))
count = 0
for num in nums:
    nums = list(filter(lambda a: a == num or a % num, nums))
    count += 1
print(count)  # 9
print(nums)

Я хочу nums = list... можно изменить nums в for num in nums, и количество равно 4. Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Решает ли это вашу проблему?

nums = list(range(2, 11))

def f(num, nums):
    return list(filter(lambda a: a == num or a % num, nums))

count = 0
for i in range(len(nums)):
    if i < len(nums):
        nums = f(nums[i], nums)
        count+=1
print(nums)
print(count)

[2,3,5,7]

4

0 голосов
/ 17 июня 2019

Без точного понимания, почему вы хотите делать то, что хотите, и нужно ли это или нужно избегать, вот решение, которое может сделать то, что вы хотите:

nums = list(range(2, 11))
count = 0
for num in nums:
    new_nums = list(filter(lambda a: a == num or a % num, nums))
    del nums[:]
    nums.extend(new_nums)
    count += 1
print(count)  # 4
print(nums)

Ваша первоначальная реализация создавала новая переменная , вызываемая со старым именем nums.Однако это была новая переменная / объект памяти, о которой цикл не знал.Предлагаемое решение сохраняет исходный объект и изменяет его, сначала удаляя все существующие элементы, а затем добавляя все новые элементы списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...