How do I update my list i.e.list2 containing perfect squares while removing identified perfect square from another list i.e. list1. I am getting only0

Viewed 22
import math
def perfectSquare(num):
    if(math.ceil(math.sqrt(num)) == math.floor(math.sqrt(num))):
        return True
    else:
        return False
list1 = [0,1]
list2 = [] 
for i in list1:
    if perfectSquare(i):
        list2.append(i)
        list1.remove(i)
print(list2)

Here I am trying to generate a new list (list2) that will contain only perfect squares from available list list1. I am stuck since yesterday how to update it to [0,1]. I am getting only [0] as my output. ! is also a perfect square and it is not getting added.

1 Answers

python for loop does not work like that. do something like this

i = 0
l = len(list1)
while i in range(l):
    if perfectSquare(i):
        list2.append(list1[i])
        list1.pop(i)
        i-=1
        l-=1
    i+=1
    
print(list1, list2)

or

list1 = [0,1]
list2 = [i for i in list1 if perfectSquare(i)]
for i in list2:
    list1.remove(i)

print(list1, list2)
Related