Σημειώσεις

Προηγούμενο

Επόμενο

Λίστες

Σειρά στοιχείων

Μία σειρά στοιχείων (αριθμών, συμβολοσειρών κλπ) μπορούν να οργανωθούν σε μία δομή η οποία ονομάζεται λίστα. Η δομή ορίζεται μεταξύ ορθογώνιων παρενθέσεων και τα στοιχεία χωρίζονται μεταξύ τους με κόμμα. Ας δούμε παραδείγματα.


>>> rgb = ['red','green','blue']
>>> cities = ['Agios','Heraklion','Rethymno','Chania']
>>> digits = [0,1,2,3,4,5,6,7,8,9]

Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len.


>>> len(digits)
10

Μπορούμε να ανακτήσουμε ένα από τα στοιχεία της λίστας χρησιμοποιώντας τον δείκτη του. Η δεικτοδότηση είναι ακριβώς όπως στις συμβολοσειρές.


>>> rgb[1]
'green'
>>> rgb[-1]
'blue'

Τεμαχισμός (slicing).

Μπορούμε να ανακτήσουμε ένα τμήμα της λίστας χρησιμοποιώντας ένα εύρος δεικτών. Το αποτέλεσμα είναι μία νέα λίστα.


>>> digits[1:3]
[1,2]
>>> digits[7:]
[7,8,9]

Βλέπουμε ότι η σύνταξη είναι όμοια με αυτή που χρησιμοποιήσαμε στον τεμαχισμό συμβολοσειρών.

Βασικές λειτουργίες

Μπορούμε να χρησιμοποιήσουμε τo σύμβολo της πρόσθεσης (+) για λίστες. Από την πρόσθεση δύο λιστών προκύπτει μία νέα λίστα η οποία περιέχει όλα τα στοιχεία των δύο λιστών. Για παράδειγμα


>>> cmyk = ['cyan','magenta','yellow','black']
>>> colors = rgb + cmyk
>>> colors
['red','green','blue','cyan','magenta','yellow','black']

Μπορούμε να χρησιμοποιήσουμε τo σύμβολo του πολλαπλασιασμού (*) μεταξύ ακεραίου n και λίστας L. Η n*L δίνει μία νέα λίστα η οποία περιέχει n φορές τα στοιχεία της L σε διαδοχική σειρά.


>>> 2*rbg
['red','green','blue','red','green','blue']
>>> 2*[0,1]
[0,1,0,1]

Μέθοδοι

Σε μία υπάρχουσα λίστα μπορούμε να προσθέσουμε ένα στοιχείο. Για παράδειγμα,


>>> colours.append('white')
>>> colors
['red','green','blue','cyan','magenta','yellow','black','white']

L.append(e)

: Έχουμε χρησιμοποιήσει μία μέθοδο η οποία ονομάζεται append και αυτή επέδρασε στη λίστα colors. Προστέθηκε ένα στοιχείο ('white') στην λίστα. Το όρισμα e της μεθόδου append προστίθεται ως τελευταίο στοιχείο στη λίστα L και η υπάρχουσα λίστα μεγαλώνει κατά ένα στοιχείο.

Η γενική σύνταξη για μία μέθοδο είναι

λιστα.μεθοδος(ορισμα).

Ας δούμε τώρα μερικές χρήσιμες μεθόδους για λίστες.

L.remove(e)

: Ψάχνει για το πρώτο στοιχείο με την τιμή e και το αφαιρεί από την λίστα L. Για παράδειγμα:


>>> colors.remove('white')
>>> colors
['red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'black']

L.pop()

: Αφαιρεί το τελευταίο στοιχείο λίστας L (και το επιστρέφει). Επίσης μπορούμε να αφαιρέσουμε στοιχείο με συγκεκριμένο δείκτη.


>>> colors.pop()
'white'
>>> colors
['red','green','blue','cyan','magenta','yellow', 'black']]

>>> colors.pop(1)
'green'
>>> colors
['red','blue','cyan','magenta','yellow', 'black']

Μεταλλαξιμότητα λιστών.

Μία λίστα είναι δυνατόν να μεταβληθεί και αυτό μπορεί να συμβεί, π.χ., όταν χρησιμοποιούμε μία από τις μεθόδους που είδαμε παραπάνω (π.χ., με την append). Λέμε ότι οι λίστες είναι μεταλλάξιμες.

Τελεστής in.

Μπορούμε να ελέγξουμε αν ένα δεδομένο στοιχείο περιέχεται σε μία λίστα.


>>> 'white' in colors
False

Παράδειγμα.

Θα μπορούσαμε να προσθέσουμε στην λίστα στοιχεία εφόσον αυτά δεν υπάρχουν ήδη.


>>> if 'white' not in colors: colors.append('white')

Παράδειγμα.

Ας υποθέσουμε ότι κάποιος έχει δημιουργήσει λίστες με μερικές από τις χώρες της Ευρώπης, Ασίας κλπ. Θα ελέγξουμε αν μία χώρα βρίσκεται σε μία από αυτές τις λίστες και αν δεν βρίσκεται θα την προσθέσουμε στην κατάλληλη λίστα.


# Create lists with the countries of the continents
Europe = ['greece','italy','france','norway','denmark','the netherlands']
Asia = ['china','india','korea','nepal','thailand','iran']
America = ['USA','perou','canada','mexico']

# ask the user for the name of a country
country = input('Give the name of a country: ')

# Initialize an auxiliary variable 
newCountry = ''

# check whether the given country is included in a list
if country in Europe:
	print(country,'is in Europe')
elif country in Asia:
	print(country,'is in Asia')
elif country in America:
	print(country,'is in America')
else:
	newCountry = input('Does this country belong to Europe, Asia or America? ')


# Add the new country in one of the lists
if newCountry == 'Europe':
	Europe.append(country)
elif newCountry == 'Asia':
	Asia.append(country)
elif newCountry == 'America':
	America.append(country)

# Print the content of the lists
print(Europe)
print(Asia)
print(America)

Παράδειγμα.

Εισάγετε μία ημερομηνία (ημέρα, μήνας, έτος) και βρείτε (και τυπώστε) την ημερομηνία της επόμενης ημέρας.


import sys     # Εισάγει εντολές και συναρτήσεις του interpreter

months31 = [1,3,5,7,8,10,12]        # Μήνες με 31 ημέρες
months30 = [4,6,9,11]               # Μήνες με 30 ημέρες

# Εισάγουμε ημερομηνία
day   = int(input("Give day: "))
month = int(input("Give month: "))
year  = int(input("Give year: "))

if 1 <= month >= 12:                # Ο μήνας πρέπει να είναι από 1 έως 12
   print("You entered the date {}-{}-{}".format(day,month,year))
else:
   print("There is no such month")
   sys.exit()                       # Τερματίζεται η εκτέλεση του προγράμματος

if month in months31:               # Βρίσκουμε την τελευταία ημέρα του μήνα
   lastday = 31
elif month in months30:
   lastday = 30
elif month == 2:
   lastday = 28
else:                               # Θα συμβεί αν υπάρχει λάθος
   print("Month has no days!")
   sys.exit()                  

# Βρίσκουμε την επόμενη ημερομηνία: ημέρα, μήνα, έτος
if 0 < day < lastday:
   day = day + 1
elif day == lastday:
   day = 1
   if month == 12:
      month = 1
      year = year + 1
   else:
      month = month + 1
else:
   print("There is no such day!")
   sys.exit()

# Τυπώνουμε το αποτέλεσμα
print("Next date is {}-{}-{}".format(day,month,year))

Άσκηση.

Εισάγετε μία ημερομηνία (ημέρα, μήνας, έτος) και βρείτε (και τυπώστε) την ημερομηνία της επόμενης ημέρας. Λάβετε υπόψιν την περίπτωση να είναι το έτος δίσεκτο.

Άλλες μέθοδοι

L.index(e).

Επιστρέφει το δείκτη της πρώτης παρουσίας του στοιχείου e στη λίστα L.

L.count(e).

Επιστρέφει τον αριθμό φορών που εμφανίζεται το στοιχείο e στη λίστα L.

L.reverse().

Αναστρέφει τη σειρά των στοιχείων στη λίστα L.

L.sort().

Ταξινομεί τα στοιχεία της λίστας L σε αύξουσα σειρά.

L.insert(i,e).

Το στοιχείο e τοποθετείται στη θέση i της λίστας L.

Παράδειγμα.

Ας δημιουργήσουμε μία λίστα, μετά θα αντιστρέψουμε τη σειρά των στοιχείων της.


>>> L = ['a','b','c','d','e','f']
>>> L.reverse()
>>> L
['f', 'e', 'd', 'c', 'b', 'a']

Παρατήρηση.

Δείτε ότι η εντολή L.reverse (καθώς και οι άλλες μέθοδοι: sort, insert κλπ) μεταλλάσσει την ίδια τη λίστα (και δεν δημιουργεί μία καινούρια για να βάλει το αποτέλεσμα της μεθόδου).

Παράδειγμα.

Ας δημιουργήσουμε μία λίστα για την οποία μετά θα ανακατέψουμε τα στοιχεία της με τυχαίο τρόπο και τέλος θα εντοπίσουμε ένα συγκεκριμένο στοιχείο της. θα χρειαστούμε τον πακέτο random το οποίο παρέχει την συνάρτηση shuffle η οποία αναδιατάσσει με τυχαίο τρόπο τα στοιχεία μίας λίστας.


import random
L = ['a','b','c','d','e','f']
random.shuffle(L)
print(L.index('a'))

Τελεστής del.

Καταστρέφει μία μεταβλητή, μία λίστα, ή στοιχεία λίστας. Παράδειγμα.


>>> a = 3
>>> a
3
>>> del a   # δεν υπάρχει πλέον μεταβλητή a

>>> L = [0,1,2,3,4,5]
>>> del L[1]
>>> L
[1,2,3,4,5]

Ειδικότερα είδη λιστών

Παρατήρηση.

Μία λίστα μπορεί να περιέχει στοιχεία διαφορετικών τύπων:


>>> exampleList = ['father',30,'son',3]

Παρατήρηση.

Μία λίστα μπορεί να περιέχει λίστες:


>>> exampleList = [[1,2,3],['a','b','c']]

Παράδειγμα.

(Άρτιες μεταθέσεις τριών αριθμών.) Ξεκινούμε με μία άδεια λίστα []. Ακολούθως, την επεκτείνουμε βάζοντας μία-μία τις άρτιες μεταθέσεις τριών αριθμών. Κάθε μία από τις μεταθέσεις είναι λίστα τριών αριθμών.


>>> permute = []
>>> permute.append([1,2,3])
>>> permute.append([2,3,1])
>>> permute.append([3,1,2])
>>> permute
[[1, 2, 3], [2, 3, 1], [3, 1, 2]]

Παράδειγμα.

Θα δούμε την πρόσβαση στα στοιχεία μίας λίστας L1 η οποία είναι στοιχείο άλλης λίστας L. Αυτό μπορεί να γίνει με δύο τρόπους: είτε μέσω της αρχικής λίστας L1 είτε μέσω του αντίστοιχου στοιχείου της μεγαλύτερης λίστας L.


>>> L1 = ['a','b','c']
>>> L2 = [1,2,3]
>>> L = [L1,L2]
>>> L
[['a', 'b', 'c'], [1, 2, 3]]
L1.append('d')
>>> L
[['a', 'b', 'c', 'd'], [1, 2, 3]]
>>> L[0].append('e')
>>> L
[['a', 'b', 'c', 'd', 'e'], [1, 2, 3]]
>>> L1
['a', 'b', 'c', 'd', 'e']

Παρατήρηση.

H εντολή eval μπορεί να αναγνωρίσει ότι μία συμβολοσειρά περιέχει δεδομένα υπό μορφή λίστας και να μετατρέψει την συμβολοσειρά σε λίστα.


>>> x = input("Give data: ")
Give data: [1,3,5,7]
>>> x = eval(x)
>>> print(x)
[1, 3, 5, 7]

Μελέτη

Βιβλιογραφία

  1. J.V. Guttag, Υπολογισμοί και προγραμματισμός με την python (Κεφάλαιο 5).
  2. Δημήτριος Καρολίδης, Μαθαίνετε εύκολα python (Παράγραφοι 4.1, 4.2) (Εκδόσεις Καρολίδη, 2016).
  3. Κ. Μαγκούτης, Χ. Νικολάου, Εισαγωγή στον αντικειμενοστραφή προγραμματισμό με Python, (Αποθετήριο "Κάλλιπος", 2016) - Κεφάλαιο 6. Συμβολοσειρές, λίστες, πλειάδες, λεξικά.