Πώς να βρείτε το ευρετήριο ενός στοιχείου σε λίστες Python

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

Όταν εργάζεστε με λίστες Python, ίσως χρειαστεί να μάθετε το ευρετήριο στο οποίο εμφανίζεται ένα συγκεκριμένο στοιχείο. Μπορείτε να το κάνετε αυτό με:

  • Περιήγηση στη λίστα και έλεγχος εάν το στοιχείο στον τρέχοντα δείκτη είναι ίσο με τη συγκεκριμένη τιμή
  • Χρησιμοποιώντας το ενσωματωμένο ευρετήριο μεθόδου λίστας()

Θα μάθετε και τα δύο παραπάνω σε αυτό το σεμινάριο. Ας ξεκινήσουμε.👩🏽‍💻

Python Lists, Revisited

Στην Python, μια λίστα είναι μια συλλογή στοιχείων—των ίδιων ή διαφορετικών τύπων δεδομένων. Είναι μεταβλητά. μπορείτε να τα τροποποιήσετε στη θέση τους χωρίς να χρειάζεται να δημιουργήσετε μια νέα λίστα.

Εξετάστε αυτό το παράδειγμα φρούτων: μια λίστα με 5 διαφορετικά φρούτα.

fruits = ["apple","mango","strawberry","pomegranate","melon"]

Μπορείτε να λάβετε το μήκος οποιουδήποτε αντικειμένου Python χρησιμοποιώντας την ενσωματωμένη συνάρτηση len(). Έτσι, μπορείτε να καλέσετε τη συνάρτηση len() με το αντικείμενο λίστας (φρούτα) ως όρισμα για να λάβετε το μήκος της, όπως φαίνεται παρακάτω.

len(fruits)
# Output: 5

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

Ευρετηρίαση σε λίστες Python

Η Python ακολουθεί μηδενική ευρετηρίαση. Έτσι, σε οποιοδήποτε επαναληπτικό Python, το πρώτο στοιχείο βρίσκεται στο ευρετήριο 0, το δεύτερο στοιχείο βρίσκεται στο δείκτη 1 και ούτω καθεξής. Αν το μήκος του επαναληπτικού είναι k, τότε το τελευταίο στοιχείο βρίσκεται στον δείκτη k – 1.

Στην Python, μπορείτε να χρησιμοποιήσετε τη συνάρτηση range() για να λάβετε δείκτες καθώς κάνετε βρόχο μέσω των iterables.

Σημείωση: Όταν κάνετε βρόχο μέσω του εύρους(k), λαμβάνετε τους δείκτες 0,1,2,…,(k-1). Έτσι ορίζοντας k = len(list), μπορείτε να λάβετε τη λίστα όλων των έγκυρων δεικτών.

Το παρακάτω κελί κώδικα εξηγεί αυτό.

for i in range(len(fruits)):
  print(f"i:{i}, fruit[{i}] is {fruits[i]}")

# Output
i:0, fruit[0] is apple
i:1, fruit[1] is mango
i:2, fruit[2] is strawberry
i:3, fruit[3] is pomegranate
i:4, fruit[4] is melon

Τώρα που καλύψαμε τα βασικά των λιστών Python, ας μάθουμε πώς να βρίσκουμε το ευρετήριο ενός στοιχείου σε μια λίστα.

  Πώς να ανεβάσετε GIF με ήχο στο Imgur

Βρείτε το ευρετήριο ενός στοιχείου λίστας με επανάληψη χρησιμοποιώντας βρόχους

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

Χρησιμοποιώντας τη συνάρτηση βρόχου και range().

Ας διορθώσουμε τον στόχο: την τιμή που αναζητούμε στη λίστα.

Μπορείτε να χρησιμοποιήσετε τη συνάρτηση for loop και range() για να λάβετε τη λίστα δεικτών από το 0 έως το len (φρούτα) – 1.

  • Περιηγηθείτε στη λίστα των φρούτων που έχουν πρόσβαση σε κάθε ευρετήριο.
  • Ελέγξτε εάν το στοιχείο στον τρέχοντα δείκτη i είναι ίσο με τον στόχο.
  • Εάν είναι True, εκτυπώστε ότι ο στόχος βρέθηκε στο ευρετήριο i.
fruits = ["apple","mango","strawberry","pomegranate","melon"]

target = "mango"

for i in range(len(fruits)):
  if fruits[i] == target:
   print(f"{target} found at index {i}")

# Output
mango found at index 1

Σε αυτό το παράδειγμα, η συμβολοσειρά στόχου ‘mango’ εμφανίζεται ακριβώς μία φορά (στο ευρετήριο 1) στα φρούτα της λίστας.

Ωστόσο, μερικές φορές η τιμή στόχος εμφανίζεται περισσότερες από μία φορές ή δεν εμφανίζεται καθόλου. Για να χειριστούμε αυτές τις περιπτώσεις, ας τροποποιήσουμε τον παραπάνω βρόχο και ας τυλίξουμε τα περιεχόμενα μέσα σε μια συνάρτηση που ονομάζεται find_in_list.

Κατανόηση του ορισμού της συνάρτησης

Η συνάρτηση find_in_list έχει δύο παραμέτρους:

  • στόχος: η τιμή που αναζητάτε και
  • py_list: η λίστα Python που αναζητάτε.
def find_in_list(target,py_list):
  target_indices = []
  for i in range(len(fruits)):
    if fruits[i] == target:
      target_indices.append(i)  
  if target_indices == []:
    print("Sorry, target not found!")
  else:
    print(f"{target} is found at indices {target_indices}")

Στο σώμα της συνάρτησης, αρχικοποιούμε μια κενή λίστα target_indices. Κάνουμε βρόχο στη λίστα και έχουμε πρόσβαση στα στοιχεία της λίστας. Εάν ο στόχος έχει βρεθεί σε ένα συγκεκριμένο ευρετήριο, προσθέτουμε αυτό το ευρετήριο στη λίστα target_indices χρησιμοποιώντας τη μέθοδο append().

Σημείωση: Στην Python, το list.append(item) προσθέτει ένα στοιχείο στο τέλος της λίστας.

  • Εάν ο στόχος δεν βρεθεί ποτέ, τότε το target_indices είναι μια κενή λίστα. ο χρήστης ειδοποιείται ότι ο στόχος δεν υπάρχει στη λίστα.
  • Εάν ο στόχος βρίσκεται σε περισσότερους από έναν δείκτες, τότε το target_indices περιέχει όλους αυτούς τους δείκτες.

Στη συνέχεια, ας επαναπροσδιορίσουμε τη λίστα φρούτων όπως φαίνεται.

Αυτή τη φορά αναζητούμε τη συμβολοσειρά στόχο «mango», η οποία εμφανίζεται δύο φορές — στους δείκτες 1 και 4.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"
find_in_list(target,fruits)

# Output
mango is found at indices [1, 4]

Όταν καλούμε τη συνάρτηση find_in_list με ορίσματα στόχο και φρούτα, βλέπουμε ότι επιστρέφονται και οι δύο δείκτες.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Αν προσπαθήσετε να αναζητήσετε «γογγύλι» που δεν υπάρχει στη λίστα φρούτων, λαμβάνετε ένα μήνυμα ότι ο στόχος δεν βρέθηκε.

  Πώς να φτιάξετε το γράφημα Viral Spotify Pie για να δείτε τα κορυφαία είδη μουσικής, τους καλλιτέχνες σας

Χρησιμοποιώντας τη συνάρτηση for Loop και enumerate().

Στην Python, μπορείτε να χρησιμοποιήσετε τη συνάρτηση enumerate() για να έχετε πρόσβαση τόσο στο ευρετήριο όσο και στα στοιχεία ταυτόχρονα—χωρίς να χρειάζεται να χρησιμοποιήσετε τη συνάρτηση range().

Το παρακάτω κελί κώδικα δείχνει πώς μπορείτε να χρησιμοποιήσετε τη συνάρτηση enumerate() για να λάβετε τόσο τους δείκτες όσο και τα στοιχεία.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
for index,fruit in enumerate(fruits):
  print(f"Index {index}: {fruit}")

# Output
Index 0: apple
Index 1: mango
Index 2: strawberry
Index 3: pomegranate
Index 4: mango
Index 5: melon

Τώρα, ας ξαναγράψουμε τη συνάρτηση Python για να βρούμε το ευρετήριο των στοιχείων στη λίστα χρησιμοποιώντας τη συνάρτηση enumerate().

def find_in_list(target,py_list):
  target_indices = []
  for index, fruit in enumerate(fruits):
   if fruit == target:
    target_indices.append(index) 
  if target_indices == []:
    print("Sorry, target not found!")
  else:
    print(f"{target} is found at indices {target_indices}")

Όπως και στην προηγούμενη ενότητα, μπορείτε τώρα να καλέσετε τη συνάρτηση find_in_list με έγκυρα ορίσματα.

Μπορείτε να μεταφράσετε τον παραπάνω ορισμό συνάρτησης σε μια ισοδύναμη κατανόηση λίστας και θα το κάνουμε στην επόμενη ενότητα.

Βρείτε ευρετήριο ενός στοιχείου λίστας με επανάληψη χρησιμοποιώντας την κατανόηση λίστας

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

new_list = [<output> for <items in existing iterables> if <condition is true>] 

Το παρακάτω σχήμα περιγράφει τον τρόπο αναγνώρισης των στοιχείων της κατανόησης λίστας. χρησιμοποιώντας αυτό, μπορείτε να μετατρέψετε τη συνάρτηση find_in_list σε κατανόηση λίστας.

Χρησιμοποιώντας τα παραπάνω, η έκφραση για την κατανόηση λίστας για τη δημιουργία δεικτών-στόχων είναι η εξής.

target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Ως άσκηση, μπορείτε να δοκιμάσετε να εκτελέσετε το παραπάνω απόσπασμα κώδικα για μερικά άλλα παραδείγματα.

Εύρεση ευρετηρίου ενός στοιχείου λίστας χρησιμοποιώντας τη μέθοδο index().

Για να βρείτε το ευρετήριο ενός στοιχείου σε μια λίστα Python, μπορείτε επίσης να χρησιμοποιήσετε την ενσωματωμένη μέθοδο .index(). Εδώ είναι η γενική σύνταξη:

list.index(value,start,end)

Ανάλυση της παραπάνω μεθόδου:

  • τιμή είναι η τιμή στόχος που αναζητάτε.
  • Η αρχή και το τέλος είναι προαιρετικά ορίσματα θέσης. μπορείτε να τα χρησιμοποιήσετε για να αναζητήσετε να βρείτε το ευρετήριο ενός στοιχείου στη λίστα που ξεκινά από την αρχή και επεκτείνεται μέχρι το τέλος – 1.
  Πώς να υπολογίσετε τα διεθνή μεγέθη σελίδων για εκτύπωση

Σημείωση: Η μέθοδος .index() επιστρέφει μόνο το ευρετήριο της πρώτης εμφάνισης τιμής στη λίστα. Ακόμη και όταν βρίσκετε ευρετήριο ενός στοιχείου σε ένα κομμάτι λίστας [start: end-1]αυτή η μέθοδος επιστρέφει μόνο το ευρετήριο που αντιστοιχεί στην πρώτη εμφάνιση του στοιχείου.

Ας δούμε ξανά το παράδειγμά μας για να κατανοήσουμε πώς λειτουργεί η μέθοδος .index().

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"

fruits.index(target)
1

Παρόλο που υπάρχουν δύο εμφανίσεις «μάνγκο» στη λίστα φρούτων, μπορείτε να δείτε ότι έχει επιστραφεί μόνο ο δείκτης της πρώτης εμφάνισης.

Για να λάβουμε το ευρετήριο της δεύτερης εμφάνισης του μάνγκο, μπορούμε να αναζητήσουμε το τμήμα λίστας που ξεκινά από τον δείκτη 2 και επεκτείνεται μέχρι το δείκτη 5, όπως φαίνεται παρακάτω.

fruits.index(target,2,5)
4

Πώς να χειριστείτε τα ValueErrors στην Python

Τώρα ας δούμε τι θα συμβεί αν προσπαθήσετε να βρείτε το ευρετήριο ενός στοιχείου που δεν υπάρχει στη λίστα, ας πούμε, «καρότο».

target = "carrot"

fruits.index(target)

# Output
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-81bd454e44f7> in <module>()
      1 target = "carrot"
      2 
----> 3 fruits.index(target)

ValueError: 'carrot' is not in list

Όπως φαίνεται στο κελί κώδικα παραπάνω, αυτό ρίχνει a ValueError. Στην Python, μπορείτε να το χειριστείτε αυτό ως εξαίρεση χρησιμοποιώντας τα μπλοκ try and εκτός.

Η γενική σύνταξη για χρήση try-except είναι η εξής.

try:
  # to do this
except <ErrorType>:
  # do this to handle <ErrorType> as exception

Χρησιμοποιώντας τα παραπάνω μπλοκ try-except, μπορούμε να χειριστούμε το ValueError ως εξαίρεση.

target = "carrot"
try:
  fruits.index(target)
except ValueError:
  print(f"Sorry, could not find {target} in list")

# Output
Sorry, could not find carrot in list

Ο παραπάνω κώδικας κάνει τα εξής:

  • Εάν ο στόχος υπάρχει στη λίστα, επιστρέφει το ευρετήριο του στόχου.
  • Εάν ο στόχος δεν υπάρχει, χειρίζεται το ValueError ως εξαίρεση και εκτυπώνει το μήνυμα σφάλματος.

Ανακεφαλαίωση

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

  • Μπορείτε να χρησιμοποιήσετε την Python’s for loop και τη συνάρτηση range() για να λάβετε τα στοιχεία και τους αντίστοιχους δείκτες τους. Ελέγξτε εάν τα στοιχεία στους δείκτες ταιριάζουν με τον στόχο.
  • Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση enumerate() για ταυτόχρονη πρόσβαση στο στοιχείο και στο ευρετήριο.
  • Μπορείτε να χρησιμοποιήσετε και τις δύο παραπάνω μεθόδους μέσα σε μια έκφραση κατανόησης λίστας.
  • Για να βρείτε το ευρετήριο ενός στοιχείου σε μια λίστα, μπορείτε επίσης να χρησιμοποιήσετε την ενσωματωμένη μέθοδο .index().
  • Το list.index(value) επιστρέφει το ευρετήριο της πρώτης εμφάνισης τιμής στη λίστα. Εάν η τιμή δεν είναι παρούσα, δημιουργεί ένα ValueError.
  • Μπορείτε να πραγματοποιήσετε αναζήτηση σε ένα συγκεκριμένο τμήμα της λίστας χρησιμοποιώντας το list.index(τιμή, αρχή, τέλος) για να αναζητήσετε την εμφάνιση μιας τιμής στο τμήμα λίστας [start:end-1].

Στη συνέχεια, μάθετε να ταξινομείτε ένα λεξικό Python κατά κλειδί ή κατά τιμή. Καλό προγραμματισμό Python!