Não da pra responder sua dúvida de o porque um achou certo e o outro achou errado no seu porque no caso o código não ta exatamente encontrando os números primos, ele ta fazendo só uma verificação de coincidência do for. Por sorte até 20 ele encontra os valores corretos, mas se você aumentar o range pra mais ele vai fazer errado!
Um exemplo resumido do que você tava fazendo que da mais certo é tipo assim:
def primo_():
lista = []
for num in range(1, 21):
for i in range(1, 21):
if num % i == 0:
lista.append(num)
if len(lista) ==2:
print(num)
lista = []
primo_()