Pytania rekrutacyjne z Pythona, z odpowiedziami, które możesz uruchomić

Rozmowy rekrutacyjne o Pythona łączą kilka prostych zadań programistycznych z pytaniami o to, jak język się zachowuje. Oto te, które pojawiają się najczęściej. Każdy przykład poniżej został uruchomiony, a pokazany wynik jest dokładny, więc możesz na nim polegać, gdy będziesz to tłumaczyć na głos.

Odwracanie ciągu znaków

Wycinek z krokiem -1 przechodzi przez ciąg od tyłu. Działa na każdej sekwencji, także na listach.

print("python"[::-1])

Wynik:

nohtyp

Czy lista zawiera duplikaty?

Zbiór (set) przechowuje każdą wartość tylko raz. Jeśli zbiór jest krótszy od listy, coś się powtórzyło. Powiedz na głos, jaki jest koszt: to jedno przejście, a elementy muszą być hashowalne.

numbers = [1, 2, 3, 2, 1]
print(len(numbers) != len(set(numbers)))

Wynik:

True

Czy dwa wyrazy są anagramami?

Dwa wyrazy są anagramami, gdy ich posortowane litery są takie same.

print(sorted("listen") == sorted("silent"))

Wynik:

True

Listy kontra krotki

Listy można zmieniać po utworzeniu, krotek nie. Krotki używa się do stałych grup, na przykład punktu, a ponieważ nie mogą się zmieniać, mogą być kluczami słownika.

point = (3, 4)
try:
    point[0] = 9
except TypeError:
    print("tuples cannot change")

Wynik:

tuples cannot change

is kontra ==

== sprawdza, czy dwie wartości są równe. is sprawdza, czy to dokładnie ten sam obiekt w pamięci. Dwie osobne listy o tej samej zawartości są równe, ale nie są tym samym obiektem.

a = [1, 2]
b = [1, 2]
print(a == b)
print(a is b)

Wynik:

True
False

Pułapka domyślnego argumentu mutowalnego

Wartość domyślna jest tworzona raz, gdy funkcja jest definiowana, a nie przy każdym wywołaniu. Jeśli domyślną wartością jest lista, każde wywołanie korzysta z tej samej listy. To najsłynniejsza pułapka w Pythonie.

def add_item(item, items=[]):
    items.append(item)
    return items

print(add_item("a"))
print(add_item("b"))

Wynik:

['a']
['a', 'b']

Rozwiązanie: użyj None

Ustaw None jako wartość domyślną i utwórz listę wewnątrz funkcji. Teraz każde wywołanie zaczyna od nowa.

def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

print(add_item("a"))
print(add_item("b"))

Wynik:

['a']
['b']

Częste pytania

Jakie zagadnienia z Pythona pojawiają się najczęściej na rozmowach?
Ciągi znaków, listy, słowniki i zbiory w zadaniach rozgrzewkowych, a potem funkcje, błędy, klasy oraz to, jak zachowują się typy mutowalne i niemutowalne. Znaj koszt typowych operacji i umiej uzasadnić wybór struktury danych.
Czy powinienem zapamiętywać rozwiązania?
Lepiej zrozum ideę każdego z nich. Jeśli umiesz wyjaśnić, dlaczego zbiór znajduje duplikaty w jednym przejściu, rozwiążesz kolejny wariant, którego nigdy wcześniej nie widziałeś.
Jak ćwiczyć wyjaśnianie swojej odpowiedzi?
Uruchom każdy przykład, a potem na głos powiedz, co wypisuje i dlaczego, zanim przeczytasz wyjaśnienie. Rekruterów interesuje tok rozumowania tak samo jak kod.

Ćwicz to