Python

Как сократить код

Можно ли сократить в питоне часть кода, которая проверяет сколько раз из промежутка выполняется условие (если необходимо произвести отбор элементов с определённым количеством чисел, соответствующих условию). пример:

на промежутке от 1 до 999 находятся числа которые можно представить суммой квадратов двух натуральных чисел единственный образом

for i in range(1, 1000):
....k = 0
....for a in range(1, isqrt(i)):
... if isqrt(i - a ** 2) == sqrt(i - a ** 2):
... k += 1
...if k == 1:(....)

возможно, 3-6 строки можно записать в одну, что упросит код и возможно оптимизирует программу, но я не знаю как это сделать, если необходимо, чтобы условие выполнялось определённое кол-во раз (в примере 1)

помогите начинающему программисту, спасибО!
Работа со списками, самое интересное

Простой генератор списка:
[i for i in range(1,1000)]

Генератор списка с условием
[i for i in range(1,1000) if i%2==0]

Простой каскад генераторов с условием:
[i2 for i2 in [i1 for i1 in range(1,1000)] if i2%2==0]

Усложнённый каскад генераторов с условием
[[i3*2 for i3 in range(1,i2)] for i2 in [i1 for i1 in range(1,1000)] if i2%2==0]

Короче в одну строчку можно налепить овер много списков и условий к ним, при этом работать это будет местами быстрее чем обычная многострочная роспись.
Бахыт Салимбетов
Бахыт Салимбетов
2 997
Лучший ответ
> 3-6 строки можно записать в одну, что упросит код и возможно оптимизирует программу

вот ты сам хоть раз пробовал пытаться разобрать, что делает "упрощённый" код в одну строчку (чужой, разумеется), прежде чем такое говорить?
про оптимизацию вообще молчу
хочешь что-нибудь оптимизировать - убери sqrt и добавь сразу отсечение, если k==2, ещё можно попробовать перебирать не сумму квадратов, а их основания по отдельности, а писать говнокод не нужно
Так делать то что программа должна, хотя бы вот из этого примера? Найти все такие натуральные числа, которые можно представить в виде двух квадратов единственным образом, и аккуратно напечатать их список? Дак тут надо не код упрощать, а проверку числа на соответствие данному требованию оптимизировать и вывод списка делать покрасивее да поэлегантнее, то есть как-нибудь так:
NN
Nikolay Nikiforov
29 440
То что Вы дали, это не код, а непонятно что.
Так как мэйл. ру корежит код до неузнаваемости, то чтобы здесь выкладывать, отступы надо заменять тильдами, или выкладывать на
pastebin.com
а сюда ссылку.

По-моему задачу:
"на промежутке от 1 до 999 находятся числа которые можно представить суммой квадратов двух натуральных чисел единственный образом"
можно решить так:
--------------
from time import time
#от 1 до N включительно
#N = 1000_000
N = 999
M = int(N**0.5)+1

#======================================
stt = time()
A = set()
B = set()#не единственным образом
for i in range(1,M):
~~~~for j in range(i,M):
~~~~~~~~a = i*i + j*j
~~~~~~~~if a <= N:
~~~~~~~~~~~~if a in A:
~~~~~~~~~~~~~~~~B.add(a)
~~~~~~~~~~~~A.add(a)
C = sorted(A-B)
print(len(C))
print(C[:10])
print(C[-10:])
print(time()-stt)
with open('f.txt','w') as fw:
~~~~print(*C,file=fw)