Tengo una lista NumList = [2,4]
y un número entero ex. 16. Quiero encontrar todos los elementos en range(1,16)
que son divisibles por 2 y 4 en NumList.
Probé el código y busqué en Internet, pero no pude obtener resultados satisfactorios. Amablemente ayuda. Por favor no critique si es básico. Soy nuevo en programación y no estoy muy familiarizado con estos fundamentos.
Código:-
fact = list()
for i in range(1,16):
for x in a:
num = i % x
if num == 0:
fact.append(i)
print(fact)
Salida: - [2, 4, 4, 6, 8, 8, 10, 12, 12, 14]. ¿Dónde me equivoco?
4 respuestas
Utilice la función all de la biblioteca estándar y {{ X0}} operador:
El operador% (módulo) produce el resto de la división del primer argumento por el segundo. Los argumentos numéricos se convierten primero a un tipo común. Un argumento de cero a la derecha genera la excepción ZeroDivisionError. Los argumentos pueden ser números de coma flotante, por ejemplo, 3.14% 0.7 es igual a 0.34 (ya que 3.14 es igual a 4 * 0.7 + 0.34.) El operador de módulo siempre produce un resultado con el mismo signo que su segundo operando (o cero); El valor absoluto del resultado es estrictamente menor que el valor absoluto del segundo operando
l = [3, 4, 5]
for num in range(1, 250):
if all(num % x == 0 for x in l):
print(num)
Imprimirá:
60
120
180
240
Puedes hacerlo usando loop
l=16
numlist=[2,5]
divlist=[]
for i in range(1,l):
a=0
for item in numlist:
if(i%item==0):
a +=1
if(a==len(numlist)):
divlist.append(i)
print(divlist)
Para obtener la lista, puede probar si la suma del módulo de cada elemento es cero:
n = [2, 4]
r = range(1,16)
[num for num in r if not sum([num % j for j in n])]
# [4, 8, 12]
Los números que son divisibles por todos los valores en NumList serán múltiplos del MCM de estos valores (mínimo común múltiplo). El módulo matemático proporciona una función gcd () que se puede usar para calcular el MCM de dos números LCM(a,b) = a*b/gcd(a,b)
.
Entonces, si primero calcula el MCM de todos los números en NumList, puede usar un rango de pasos para obtener directamente los múltiplos que está buscando:
numList = [2,4]
maxNum = 16
from math import gcd
LCM = 1
for n in numList: LCM = LCM*n//gcd(LCM,n)
multiples = list(range(LCM,maxNum+1,LCM))
print(multiples) # [4, 8, 12, 16]
Tenga en cuenta que esto se ejecutará mucho más rápido que las técnicas de módulo cuando los números en numList son grandes:
Por ejemplo:
numList = [295243, 2975141]
maxNum = 270737831
El enfoque de múltiplos de LCM produce el resultado instantáneamente (a diferencia de los bucles de módulo que tomarían mucho tiempo)
# [38676833, 77353666, 116030499, 154707332, 193384165, 232060998, 270737831]
Si no desea usar el módulo matemático, puede escribir sus propias funciones gcd()
y lcm()
y usarlas así:
def gcd(a,b): return b if a == 0 else gcd(b%a,a)
def lcm(a,b,*c): return a*b//gcd(a,b) if not c else lcm(lcm(a,b),*c)
numList = [2,3,5,7,11,13,17,19]
maxNum = 70000000
LCM = lcm(*numList)
multiples = list(range(LCM,maxNum+1,LCM))
# [9699690, 19399380, 29099070, 38798760, 48498450, 58198140, 67897830]
Tenga en cuenta que la recursividad en lcm () elimina los bucles for y solo se aplica a los valores en numList. El rendimiento general será proporcional al número de factores en numList en lugar de un múltiplo de maxNum.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.