Циклический просмотр списка так, чтобы он печатал новый список для каждого элемента, содержащего факторы этого элемента - PullRequest
0 голосов
/ 04 октября 2019

Как я могу изменить следующий код, чтобы он печатал отдельные списки, содержащие факторы элементов в данном списке?

n = [3,4,5]
for i in n:
    print('Factors of ', i)
    for j in range(1,i+1):
        if i%j == 0:
           print(j)

Ответы [ 4 ]

1 голос
/ 04 октября 2019

Я бы пошел на простую factors функцию, а затем сделал бы цикл

def factors(n):
    """Not the most optimal solution"""
    return [i for i in range(1, n+1) if not n % i]

n = [3, 4, 5]
for i in n:
    print(f'Factors of {i} = {factors(i)}')

вывод

Factors of 3 = [1, 3]
Factors of 4 = [1, 2, 4]
Factors of 5 = [1, 5]
0 голосов
/ 04 октября 2019

Я бы создал список для хранения факторов и добавил бы элементы в список во время цикла.

n = [3,4,5]

for i in n:
  print('Factors of ', i)
  l = []
  for j in range(1,i+1):
    if i%j == 0:
      l.append(j)
  print(list(set(l)))

Вывод:

Factors of  3
[1, 3]
Factors of  4
[1, 2, 4]
Factors of  5
[1, 5]

Я использовал набор () просто чтобы убедиться, что список вывода уникален.

0 голосов
/ 04 октября 2019

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

n = [3, 4, 5]

def get_factors(num):
    result = []
    for i in range(1, num+1):
        if num % i == 0:
            result.append(i)
    return result

print([get_factors(elem) for elem in n])

Дайте мне знать, если это ответит на ваш вопрос?

0 голосов
/ 04 октября 2019

Это работает для меня:

n = [3,4,5]
for i in n:
    print('Factors of ', i)
    remaining = i
    while remaining > 1 :
        for j in range(2,remaining+1):
            if remaining%j == 0:
               print(j)
           remaining /= j

Результат:

('Factors of ', 3)
3
('Factors of ', 4)
2
2
('Factors of ', 5)
5
>>> 

, который работает по совпадению, как команда Linux factor:

$ factor 3 4 5
3: 3
4: 2 2
5: 5
...