Я пытаюсь вернуть вывод True / False, основываясь на том, являются ли числа в списке квадратными числами или нет.
Список необходимо проверить несколько раз, и список может быть любым положительным целым числом , что означает, что целое число может быть очень большим , фактически слишком большим дляиспользование других решений, включающих функции math.sqrt (), которые вызывают ошибку переполнения, показанную здесь:
userList = [1*10**1000]
print ([x for x in userList if math.sqrt(x).is_integer()])
>>>Traceback (most recent call last):
print ([x for x in userList if math.sqrt(x).is_integer()])
OverflowError: int too large to convert to float
Вот мой * метод:
def squares():
for i in userList:
if i in squares: #the list in which all the square numbers are stored
return True
else:
return False
* Моя текущая идея - предварительно подготовить квадратные числа в отдельный список, чтобы сравнить их, но я ищу, возможно, альтернативный более быстрый метод, так как список пользователей может стать очень большим.
Я хочу сохранить возвращенный вывод в отдельном списке следующим образом:
out = []
for i in userList:
out.append(squares())
print(out)
>>>[False,True...]
Как вы можете видеть, это займет много времени при работе со многими числами, и именно поэтому я и требуюболее быстрый метод.