Skip to content

Commit 698f83a

Browse files
authored
Merge pull request #405 from realpython/python-list
Sample code for the Python `list` article
2 parents e4c172c + 4567a95 commit 698f83a

8 files changed

Lines changed: 89 additions & 0 deletions

File tree

python-list/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Python's list Data Type: A Deep Dive With Examples
2+
3+
This folder provides the code examples for the Real Python tutorial [Python's `list` Data Type: A Deep Dive With Examples](https://realpython.com/python-list/).

python-list/chunks.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def split_list(list_object, chunk_size):
2+
chunks = []
3+
for start in range(0, len(list_object), chunk_size):
4+
stop = start + chunk_size
5+
chunks.append(list_object[start:stop])
6+
return chunks

python-list/employee.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
employees = [
2+
("John", 30, "Designer", 75000),
3+
("Jane", 28, "Engineer", 60000),
4+
("Bob", 35, "Analyst", 50000),
5+
("Mary", 25, "Service", 40000),
6+
("Tom", 40, "Director", 90000),
7+
]
8+
9+
10+
sorted_employees = sorted(employees, key=lambda e: e[1])

python-list/fibonacci.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def fibonacci_generator(stop):
2+
current_fib, next_fib = 0, 1
3+
for _ in range(0, stop):
4+
fib_number = current_fib
5+
current_fib, next_fib = next_fib, current_fib + next_fib
6+
yield fib_number

python-list/grades.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class GradeList(list):
2+
def __init__(self, grades):
3+
grades = [self._validate(grade) for grade in grades]
4+
super().__init__(grades)
5+
6+
def __setitem__(self, index, grade):
7+
if isinstance(index, slice):
8+
start, stop, step = index.indices(len(self))
9+
grades = [self._validate(grade) for grade in grade]
10+
return super().__setitem__(slice(start, stop, step), grades)
11+
super().__setitem__(index, self._validate(grade))
12+
13+
def __add__(self, grades):
14+
grades = [self._validate(grade) for grade in grades]
15+
grades = super().__add__(grades)
16+
return self.__class__(grades)
17+
18+
__radd__ = __add__
19+
20+
def __iadd__(self, grades):
21+
grades = [self._validate(grade) for grade in grades]
22+
return super().__iadd__(grades)
23+
24+
def append(self, grade):
25+
return super().append(self._validate(grade))
26+
27+
def extend(self, grades):
28+
grades = [self._validate(grade) for grade in grades]
29+
return super().extend(grades)
30+
31+
def average(self):
32+
return sum(self) / len(self)
33+
34+
def _validate(self, value):
35+
if not isinstance(value, (int, float)):
36+
raise TypeError("grades must be numeric")
37+
if not (0 <= value <= 100):
38+
raise ValueError("grade must be between 0 and 100")
39+
return value

python-list/matrix.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
matrix = []
2+
for row in range(5):
3+
matrix.append([])
4+
for _ in range(5):
5+
matrix[row].append(0)
6+
7+
matrix = [[0 for _ in range(5)] for _ in range(5)]
8+
9+
matrix = [[0] * 5 for _ in range(5)]

python-list/median.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
def median(sample):
2+
n = len(sample)
3+
index = n // 2
4+
sorted_sample = sorted(sample)
5+
# Odd number of values
6+
if n % 2 != 0:
7+
return sorted_sample[index]
8+
# Even number of values
9+
lower, upper = index - 1, index + 1
10+
return sum(sorted_sample[lower:upper]) / 2

python-list/repeated.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def get_unique_items(list_object):
2+
result = []
3+
for item in list_object:
4+
if item not in result:
5+
result.append(item)
6+
return result

0 commit comments

Comments
 (0)