Masz wrażenie, że nikt nie czyta Twojego CV? Nie dostajesz zaproszeń na rozmowy rekrutacyjne?
Sprawdź swoje umiejętności techniczne a MockIT pomoże Ci znaleźć pracę w IT!
Python Developer - przykładowe pytania rekrutacyjne dotyczące list + odpowiedzi
Jeśli dopiero zaczynasz swoją ścieżkę programisty Python ten artykuł jest dla Ciebie! Opisuję w nim najbardziej podstawowe pytania z zakresu list w Python. Absolutny must-have dla każdego Junior Python Developera.
Intro
W świecie programowania, znajomość struktur danych jest kluczowa dla efektywnego tworzenia oprogramowania. Wśród wielu przydatnych narzędzi, jakie oferuje język Python, listy są jednym z fundamentalnych elementów. Są wszechstronne, elastyczne i szeroko wykorzystywane zarówno przez początkujących, jak i doświadczonych programistów Python.
Podczas procesu rekrutacji pytania o struktury danych są standardem w wielu językach programowania, w tym w tak popularnych jak JavaScript i Java. Pozwalają szybko określić poziom zaawansowania kandydata - nie tylko podczas sekcji z pytaniami technicznym, lecz również podczas rozwiązywania zadań rekrutacyjnych
Niniejszy artykuł powstał, abyś mógł poznać przykładowe pytania dotyczące list w Pythonie wraz z odpowiedziami. Ze względu na poziom zaawansowania, te pytania najczęściej pojawiają się podczas rozmów kwalifikacyjnych na stanowisko Junior Python Developera
Jakie są główne cechy list w Pythonie?
Lista w pythonie to podstawowa, dynamiczna struktura danych. Przechowuje ona kolekcję elementów oraz zachowuje ich kolejność.
Dynamiczna wielkość
Listy w Pythonie mogą dynamicznie zmieniać swoją wielkość. Możemy dodawać nowe elementy do listy za pomocą metody append(), extend(), lub insert(), a także usuwać elementy za pomocą metod remove(), pop() lub operatora del.
Heterogeniczność elementów
W odróżnieniu od wielu innych języków programowania, listy w Pythonie mogą przechowywać elementy różnych typów danych. Oznacza to, że w jednej liście możemy mieć liczby całkowite, liczby zmiennoprzecinkowe, łańcuchy znaków, a nawet inne listy.
Indeksowanie i dostęp
Listy w Pythonie obsługują indeksowanie, co umożliwia dostęp do poszczególnych elementów za pomocą ich indeksów. Indeksowanie zaczyna się od zera. Możliwe jest również używanie indeksów ujemnych, które odwołują się do elementów od końca listy.
Mutowalność
Listy są mutowalne, co oznacza, że możemy zmieniać ich zawartość po ich utworzeniu. Możemy zmieniać wartości poszczególnych elementów, a także dodawać lub usuwać elementy.
names = ['Michał', 'Kinga', 'Monika']
names[2] = 'Boromir'
# Result: ['Michał', 'Kinga', 'Boromir']
Czym różnią się metody append(), extend() i insert() w przypadku list w języku Python?
Wśród wielu metod dostępnych dla list, trzy z nich – append(), extend() oraz insert() – są często używane do dodawania nowych elementów. Chociaż na pierwszy rzut oka mogą wydawać się podobne, każda z nich służy innemu celowi i działa w specyficzny sposób. Przyjrzyjmy się bliżej tym metodom, aby dowiedzieć się, czym się różnią i jak je poprawnie stosować.
Metoda append()
Metoda append() służy do dodawania jednego elementu na końcu listy. Jest to prosty sposób na rozszerzenie listy o pojedynczy obiekt.
Metoda extend()
Metoda extend() umożliwia dodanie wielu elementów do listy za jednym razem. Przyjmuje jako argument iterowalny obiekt (np. inną listę) i dodaje każdy jego element na końcu oryginalnej listy.
example_list = [1, 2, 3]
example_list.extend([4, 5, 6])
# Result: [1, 2, 3, 4, 5, 6]
Metoda insert()
Metoda insert() umożliwia wstawienie elementu na dowolną pozycję w liście. Wymaga dwóch argumentów: indeksu, pod którym element ma zostać dodany, oraz samego elementu.
example_list = [1, 2, 3]
example_list.insert(1, 'a')
# Result: [1, 'a', 2, 3]
Jak posortować listę w Pythonie? Czy jest różnica między metodą sort() a funkcją sorted()?
Sortowanie list to jedna z często wykonywanych operacji w programowaniu. Python oferuje dwa główne sposoby sortowania list: metodę sort() oraz funkcję sorted() . Chociaż obie metody są używane do tego samego celu, działają one w nieco inny sposób. Zrozumienie tych różnic pomoże Ci podjąć decyzję przy wyborze odpowiedniego podejścia w zależności od konkretnej sytuacji.
Metoda sort()
Metoda sort() jest metodą wbudowaną list w Pythonie, która sortuje elementy listy w miejscu, czyli modyfikuje oryginalną listę. Domyślnie sortuje w porządku rosnącym, ale można użyć opcjonalnych argumentów, aby zmienić jej zachowanie.
example_list = [3, 1, 4, 1, 5, 9, 2]
example_list.sort()
# Result: [1, 1, 2, 3, 4, 5, 9]
W powyższym przykładzie, metoda sort() sortuje listę lista w miejscu. Oryginalna lista jest zmodyfikowana. Argumenty opcjonalne:
reverse: Jeśli True, lista jest sortowana w porządku malejącym.
key: Funkcja, która służy jako klucz do porównywania elementów.
example_list = ["apple", "banana", "cherry"]
example_list.sort(key=len)
# Result: ['apple', 'cherry', 'banana']
Funkcja sorted()
Funkcja sorted() sortuje elementy dowolnego iterowalnego obiektu (takiego jak listy, krotki, ciągi znaków) i zwraca nową listę zawierającą posortowane elementy. Oryginalny obiekt pozostaje niezmieniony.
example_list = [3, 1, 4, 1, 5, 9, 2]
new_example_list = sorted(example_list)
print(new_example_list) # Output: [1, 1, 2, 3, 4, 5, 9]
print(example_list) # Output: [3, 1, 4, 1, 5, 9, 2]
Podobnie jak metoda sort(), funkcja sorted() również przyjmuje argumenty key i reverse.
example_list = ["apple", "banana", "cherry"]
new_example_list = sorted(example_list, key=len, reverse=True)
print(new_example_list) # Output: ['banana', 'cherry', 'apple']
Podsumowanie
sort(): Metoda listy, która sortuje oryginalną listę w miejscu. Nie zwraca nowej listy, lecz modyfikuje istniejącą. Używana głównie, gdy nie potrzebujemy zachować oryginalnej wersji listy.
sorted(): Funkcja wbudowana, która zwraca nową posortowaną listę z dowolnego iterowalnego obiektu, pozostawiając oryginalny obiekt bez zmian. Idealna, gdy chcemy zachować oryginalny obiekt.
Znajomość tych różnic pozwala na lepsze dostosowanie metod sortowania do specyficznych potrzeb w Twoim kodzie. Wybór między sort() a sorted() zależy od tego, czy chcesz zmodyfikować istniejącą listę, czy wolisz pracować na kopii listy.
Jak uzyskać listę z unikalnymi wartościami?
W Pythonie często zdarza się, że musimy uzyskać listę zawierającą tylko unikalne wartości z oryginalnej listy. Istnieje kilka sposobów, aby to osiągnąć, z wykorzystaniem różnych narzędzi i metod dostępnych w języku Python. Przyjrzyjmy się kilku najczęściej stosowanym technikom.
Użycie zbioru
Najprostszym i najczęściej stosowanym sposobem uzyskania unikalnych wartości z listy jest użycie zbioru ( set ). Zbiory w Pythonie automatycznie eliminują duplikaty, ponieważ mogą zawierać tylko unikalne elementy.
example_list = [1, 2, 2, 3, 4, 4, 5]
uniques = list(set(example_list))
# Result: [1, 2, 3, 4, 5]
Użycie pętli i listy pomocniczej
Innym sposobem jest użycie pętli, aby iterować przez oryginalną listę i dodawać elementy do nowej listy tylko wtedy, gdy jeszcze się w niej nie znajdują.
example_list = [1, 2, 2, 3, 4, 4, 5]
uniques = []
for element in example_list:
if element not in uniques:
uniques.append(element)
# Result: [1, 2, 3, 4, 5]
Oprócz podanych dwóch, istnieją oczywiście inne sposoby, np. wykorzystujące bibliotekę pandas lub list coprehension.
Jak uzyskać podlistę z listy? Wyjaśnij użycie operatora wycinka (slicing).
W Pythonie uzyskanie podlisty z istniejącej listy jest bardzo proste dzięki wykorzystaniu operatora wycinka (ang. slicing). Operator ten pozwala na wybranie określonego zakresu elementów z listy w sposób czytelny i intuicyjny. Zrozumienie mechanizmu wycinka jest kluczowe dla efektywnego manipulowania listami.
Podstawowy składnik wycinka
lista[start:stop:step]
start: Indeks, od którego zaczyna się wycinek (włącznie).
stop: Indeks, od którego zaczyna się wycinek (włącznie).
step: Krok, co ile elementów wybrać.
example_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sub_example_list = example_list[1:8:2]
print(sub_example_list) # Output: [1, 3, 5, 7]
Wycinki mogą również przyjmować wartości ujemne dla start , stop i step . Wartości ujemne odnoszą się do indeksów od końca listy.
example_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sub_example_list = example_list[-5:-1]
print(sub_example_list) # Output: [5, 6, 7, 8]
sub_example_list = example_list[: -1]
print(sub_example_list) # Output: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
List comprehension - co to jest i jak używać?
List comprehension to zaawansowana i elegancka konstrukcja w Pythonie, która umożliwia tworzenie nowych list na podstawie istniejących iterowalnych obiektów w sposób zwięzły i czytelny. Użycie list comprehension pozwala na łączenie pętli oraz warunków logicznych w jednym, zwartym wyrażeniu.
Podstawowa składnia list comprehension
nowa_lista = [wyrażenie for element in iterowalny]
wyrazenie: Wyrażenie, które oblicza wartości dla nowej listy.
element: Zmienna, która przechowuje bieżący element z iterowalnego obiektu.
iterowalny: Iterowalny obiekt (np. lista, krotka, zbiór), z którego pobierane są elementy.
numbers = [1, 2, 3, 4, 5]
quadratics = [x**2 for x in numbers]
print(quadratics) # Output: [1, 4, 9, 16, 25]
Możemy również dodawać warunki do list comprehension, aby filtrować elementy, które mają być włączone do nowej listy.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even = [x for x in numbers if x % 2 0]
print(even) # Output: [2, 4, 6, 8, 10]
W tym przypadku, do nowej listy parzyste są dodawane tylko te liczby z listy liczby , które są parzyste.
Jak używać wbudowanej funkcji filter()?
Funkcja wbudowana filter() w Pythonie służy do filtrowania elementów z sekwencji na podstawie określonego warunku. Przyjmuje dwa argumenty: funkcję filtrującą i sekwencję, którą chcemy przefiltrować.
Ogólna składnia funkcji filter() wygląda następująco: filter(funkcja_filtrująca, sekwencja)
Funkcja filter() zwraca obiekt iteratora, który zawiera tylko te elementy z sekwencji, dla których funkcja filtrująca zwraca True. Aby uzyskać wynik w postaci listy, można użyć funkcji list() do konwersji obiektu iteratora na listę. Jest to standardowa praktyka. Funkcja filter() jest często używana w połączeniu z funkcjami anonimowymi lambda.
number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even = list(filter(lambda x: x % 2 0, number))
print(even) # Output: [2, 4, 6, 8, 10]
Jak używać wbudowanej funkcji map()?
Funkcja wbudowana map() w Pythonie służy do przekształcania elementów sekwencji za pomocą określonej funkcji. Przyjmuje dwa argumenty: funkcję mapującą i sekwencję, którą chcemy przekształcić.
Funkcja map() zwraca obiekt iteratora, który zawiera wyniki zastosowania funkcji mapującej do każdego elementu sekwencji. Chcąc uzyskać wynik w postaci listy, można użyć funkcji list() do konwersji obiektu iteratora na listę. Podobnie jak w przypadku funkcji filter() jest to standardowa praktyka.
Jakie są różnice w działaniu deepcopy i copy na listach zagnieżdżonych?
W Pythonie kopiowanie obiektów można realizować na kilka sposobów, w zależności od głębokości kopiowania. Dla prostych, płaskich list wystarczy płytka kopia (shallow copy), ale w przypadku list zagnieżdżonych często konieczne jest zastosowanie głębokiej kopii (deep copy). Zrozumienie różnic między copy a deepcopy jest kluczowe dla prawidłowego zarządzania danymi w takich strukturach.
Płytka kopia
Funkcja copy() tworzy płytką kopię obiektu. Dla list oznacza to, że nowa lista zostanie utworzona z referencjami do tych samych elementów, co oryginalna lista. Oznacza to, że zmiany w elementach zagnieżdżonych będą widoczne zarówno w oryginale, jak i w kopii.
import copy
example_list = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(example_list)
# Modifying inner element
shallow_copy[0][0] = 'a'
print(example_list) # Output: [['a', 2, 3], [4, 5, 6]]
print(shallow_copy) # Output: [['a', 2, 3], [4, 5, 6]]
Głęboka kopia
Funkcja deepcopy() tworzy głęboką kopię obiektu. Oznacza to, że wszystkie zagnieżdżone obiekty są rekurencyjnie kopiowane, tworząc w pełni niezależną kopię oryginalnej struktury. Zmiany w zagnieżdżonych elementach nie będą miały wpływu na oryginalny obiekt.
import copy
example_list = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(example_list)
# Modyfikacja zagnieżdżonego elementu
deep_copy[0][0] = 'a'
print(example_list) # Output: [[1, 2, 3], [4, 5, 6]]
print(deep_copy) # Output: [['a', 2, 3], [4, 5, 6]]
Podsumowanie
Znajomość list w Pythonie jest kluczowa dla każdego programisty Python, niezależnie od doświadczenia. Zapoznanie się z zagadnieniami przedstawionym w artykule, nie tylko pomoże Ci lepiej przygotować się do rozmów kwalifikacyjnych an stanowisko Python Developera, ale również pogłębi Twoją wiedzę.
Pamiętaj, że kluczem do sukcesu jest nie tylko znajomość teorii, ale także umiejętność zastosowania jej w praktyce. Co również może zostać sprawdzone na rozmowie rekrutacyjnej. Regularne ćwiczenie zadań i rozwiązywanie problemów pomoże Ci zyskać pewność siebie i lepiej zaprezentować swoje umiejętności podczas rozmowy.