0

I was wondering if there was a way to make it more compact.

Here is the first version I made:

primes = []
for i in range(2,1000) :
    for j in range(2,i): 
        if i%j == 0 :break
    else: primes.append(i) if sum([int(k) for k in str(i)]) % 2 == 1 else None
print(primes)

Here is the second version

def is_prime(n):return 0 not in [n%i for i in range(2,n//2+1)]
primes2 = [i for i in range(2,1000) if is_prime(i)]
print([ i for i in primes2 if sum([int(k) for k in str(i)]) % 2 == 1])

Is there a way to make it all fit in a single line

  • `print([ i for i in [i for i in range(2,1000) if (lambda n: 0 not in [n%i for i in range(2,n//2+1)])(i)] if sum([int(k) for k in str(i)]) % 2 == 1])` Just combine replace `primes2` in line 3 with its definition, and convert `is_prime` to a lambda function. Tada, one line! – Jason Grace Feb 22 '23 at 01:36

0 Answers0