Spróbuj tak:
n=4
l=[2,3,4,5,6]
print(list((i,i**2) for i in l)[:n])
Formatowanie danych wynikowych można łatwo zmienić, ale IMHO lepiej jest dać na wyjściu pary, tak jak w moim przykładzie.
Jeśli chcesz koniecznie zrobić program na bazie aktualnego kodu, to z "działania f" zrób sobie funkcję, do której będziesz w istniejącej pętli for przekazywała l[i] jako argument. Jeśli chcesz dane wynikowe wypisać w jednej linijce, to za nawiasem printa dopisz przecinek:
n=4
l=[2,3,4,5,6]
def f(argument):
return argument*argument
for i in range(n-1):
print(l[i], f(l[i]),end=" ")
print()
Według przykładowego wyjścia chodzi Ci o l[i] podniesioną do potęgi drugiej, Twój kod z pętlą while jest bez sensu. Po tym jak zapisałaś print, wnioskuję, że używasz Python3.