Próbuję napisać funkcję, która znajdzie wszystkie liczby, które są wielokrotnością co najmniej jednej liczby na liście, w której wielokrotność jest mniejsza niż określona liczba. Oto, co do tej pory próbowałem:

def MultiplesUnderX(MultArray,X):
    '''
    Finds all the multiples of each value in MultArray that
    are below X.
    MultArray: List of ints that multiples are needed of
    X: Int that multiples will go up to
    '''
    return [i if (i % x == 0 for x in MultArray) else 0 for i in range(X)]

Na przykład, wielokrotniendziex ([2,3], 10) powróciłby [2,3,4,6,9]. Jestem trochę niepewny, jak to zrobić za pomocą pętli w poszukiwaniu rozumienia listy.

4
TheStrangeQuark 27 czerwiec 2017, 01:30

3 odpowiedzi

Najlepsza odpowiedź

Możesz użyć funkcji Pythona (), aby sprawdzić, czy istnieje co najmniej jedna instancja dzielnika w Multiarray:

def MultiplesUnderX(MultArray,X):

    return [i for i in range(X) if any(i % x == 0 for x in MultArray)]
8
Ajax1234 26 czerwiec 2017, 22:54

Inną wersją tego algorytmu, który może być bardziej wydajny, jeśli lista jest głównie współobrazy, możesz użyć range(i, X, i), aby wygenerować tylko wielokrotności i, a następnie użyj

Możesz użyć wbudowanej funkcji Pythona any, który zwraca True, jeśli irelable przekazano Wartości prawdy-Y w połączeniu z warunkami na końcu rozumienia listy ograniczającą listę tylko do elementów to spełniają połączenie any.

def get_multiples_under(factors, max):
    return [i for i in xrange(1, max) if any(i % factor == 0 for factor in factors)]

Twoja pożądana wyjście jest wyświetlane jako takie:

multiples = [2, 3]
print get_multiples_under(multiples, 10)
# [2, 3, 4, 6, 8, 9]
1
foslock 26 czerwiec 2017, 22:40