Τμήμα Πληροφορικής και Τηλεπικοινωνιών - Άρτα
Πανεπιστήμιο Ιωαννίνων
Γκόγκος Χρήστος
http://chgogos.github.io/
Τελευταία ενημέρωση: 17/3/2022
# Η συνάρτηση range είναι μια γεννήτρια αριθμών
print(range(10)) # παράγει τους αριθμούς από 0 μέχρι και 9
print("#"*20)
a = range(10)
itr = iter(a) # χρειαζόμαστε έναν iterator για να διασχίσουμε το range
print(next(itr))
print(next(itr))
print(next(itr))
print("#"*20)
# άκομψος τρόπος διάσχισης ενός range με while
a = range(10)
itr = iter(a)
while True:
try:
print(next(itr), end="")
except StopIteration:
break
print()
print("#"*20)
# η for μας επιτρέπει να διασχίσουμε ένα range χωρίς να χρειαστεί να ορίσουμε και να γράψουμε έναν iterator
for i in range(10):
print(i, end="")
print()
print("#"*20)
# περισσότερα για τις for και while στη συνέχεια
range(0, 10) #################### 0 1 2 #################### 0123456789 #################### 0123456789 ####################
print(list(range(10)))
print(list(range(5, 10))) # παράγει τους αριθμούς από 5 μέχρι και 9
print(list(range(0, 101, 5))) # παράγει τους αριθμούς από 0 μέχρι και 100 με βήμα 5
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [5, 6, 7, 8, 9] [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
# επανάληψη σε range
for x in range(10):
print(x, end=" ")
0 1 2 3 4 5 6 7 8 9
# επανάληψη σε λίστα
a_list = [5, 2, 8, 9]
for x in a_list:
print(x)
print("#" * 20)
length = len(a_list)
for i in range(length):
print(i, a_list[i])
print("#" * 20)
for i, v in enumerate(a_list):
print(i, v)
5 2 8 9 #################### 0 5 1 2 2 8 3 9 #################### 0 5 1 2 2 8 3 9
# επανάληψη σε πλειάδα (ίδια με τις λίστες αλλά είναι immutable)
a_tuple = (5, 2, 8, 9)
for x in a_tuple:
print(x)
print("#" * 20)
length = len(a_tuple)
for i in range(length):
print(i, a_tuple[i])
print("#" * 20)
for i, v in enumerate(a_tuple):
print(i, v)
5 2 8 9 #################### 0 5 1 2 2 8 3 9 #################### 0 5 1 2 2 8 3 9
# επανάληψη σε λεξικά
a_dict = {"a1": 56, "b2": 77, "b4": 38}
for x in a_dict:
print(x, "->", a_dict[x])
print("#" * 20)
for v in a_dict.keys():
print(v)
print("#" * 20)
for v in a_dict.values():
print(v)
print("#" * 20)
for key, value in a_dict.items():
print(key, "->", value)
a1 -> 56 b2 -> 77 b4 -> 38 #################### a1 b2 b4 #################### 56 77 38 #################### a1 -> 56 b2 -> 77 b4 -> 38
# for ... else (αλλάξτε στην if το 100 σε 1000 και θα εμφανιστεί το μήνυμα στην else καθώς θα έχει διανυθεί όλη η λίστα)
sum = 0
for x in [56, 42, 78, 90]:
sum += x
print(x, sum)
if sum > 100:
break
else:
print("Η επανάληψη 'πέρασε' από όλα τα στοιχεία της λίστας")
56 56 42 98 78 176
# ενημέρωση στοιχείων λίστας κατά τη διάσχιση της λίστας
a_list = [1, 2, 3, 4, 5]
for x in a_list:
x += 1 # τα στοιχεία της λίστας (int) δεν ενημερώνονται διότι είναι immutable
print(a_list)
a_list = [1, 2, 3, 4, 5]
for i in range(len(a_list)):
a_list[i] += 1
print(a_list)
[1, 2, 3, 4, 5] [2, 3, 4, 5, 6]
# Εμφωλευμένες επαναλήψεις
for i in range(3):
for j in range(3):
print(i, j)
0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2
i = 10
while i <= 100:
print(i)
i += 10
10 20 30 40 50 60 70 80 90 100
# το break και το continue
i = 10
while i <= 100:
if i == 50:
i += 10
continue
print(i)
if i == 80:
break
i += 10
10 20 30 40 60 70 80
# διάσχιση δύο λιστών μαζί
list1 = [1,2,3,4,5]
list2 = ['a','b','c','d','e','f']
for x, y in zip(list1, list2):
print(x,y)
1 a 2 b 3 c 4 d 5 e
# ταξινόμηση "κατά τη διάσχιση" μιας λίστας
list1 = [1,6,2,4,5,3]
for i in sorted(list1):
print(i)
print(list1)
print('#'*40)
for i in sorted(list1, reverse=True):
print(i)
print(list1)
1 2 3 4 5 6 [1, 6, 2, 4, 5, 3] ######################################## 6 5 4 3 2 1 [1, 6, 2, 4, 5, 3]
# διάσχιση σε επιλέγμένα μόνο στοιχεία μιας λίστας
list1 = [1,2,3,4,5,6,7,8,9]
for x in filter(lambda i: i%2==0 and i > 5, list1): # με filter
print(x)
print('#'*40)
for x in [i for i in list1 if i%2==0 and i > 5]: # με list comprehension
print(x)
6 8 ######################################## 6 8