Δημοσιεύτηκε: 05 Αύγ 2009, 11:46
Luke έγραψε:Στο κομμάτι με τις μεθόδους των strings αναφέρει τη μέθοδο find() η οποία μπορεί να "ανακαλύψει" αν υπάρχει ένα συγκεκριμένο pattern μέσα σε μία συμβολοσειρά και πιο συγκεκριμένα τη θέση στην οποία βρίσκεται μέσα στο string. Όμως η συγκεκριμένη μέθοδος επιστρέφει τη θέση που πρωτοβρίσκει "σκανάροντας" από τα αριστερά στα δεξιά. Την ίδια δουλειά κάνει και η rfind(), ξεκινώντας το ψάξιμο από τα δεξιά προς τα αριστερά;
Το ερώτημά μου είναι αν υπάρχει κάποια έτοιμη μέθοδος η οποία να μην εμφανίζει μόνο την 1η εμφάνιση του pattern (είτε από δεξιά είτε από αριστερά) αλλά αν αυτό το pattern υπάρχει πάνω από μία φορά να εμφανίζει όλα τα indices μέσα στο string που έχουν βρεθεί. Για παράδειγμα ψάχνοντας το 'Wor' στη συμβολοσειρά 'WorldWorldWorld' να επιστρέφει [0,5,10] ως δείκτες όπου βρέθηκε το 'Wor'.
Στα pyhton docs που κοίταξα δε βρήκα κάτι γι' αυτό ρωτώ.
Δε βρήκα κάποια έτοιμη (δεν έψαξα και πολύ όμως, οπότε μπορεί και να υπάρχει), αλλά μπορείς να γράψεις εύκολα μία δική σου:
- Κώδικας: Επιλογή όλων
#!/usr/bin/env python3
def find_all(S, pattern):
position = 0
length = len(S)
end_index = length
result = []
while ( (position<length) and (position > -1) ):
position = S.find(pattern, position, end_index)
result.append(position)
if(position != -1):
position += 1
last_index = result[len(result)-1]
if(last_index == -1):
result.remove(last_index)
return result