Αυτή τη στιγμή χρησιμοποιώ μια λίστα και περίμενα κάτι σαν:
verts = list (1000)
Μήπως θα έπρεπε να χρησιμοποιήσω πίνακα αντ' αυτού;
Το πρώτο πράγμα που μου έρχεται στο μυαλό είναι:
verts = [None]*1000
Αλλά χρειάζεται πραγματικά να το προ-αρχικοποιήσετε;
Θα πρέπει να εξετάσετε το ενδεχόμενο να χρησιμοποιήσετε έναν τύπο dict
αντί για προ-αρχικοποιημένη λίστα. Το κόστος μιας αναζήτησης σε λεξικό είναι μικρό και συγκρίσιμο με το κόστος πρόσβασης σε αυθαίρετο στοιχείο λίστας.
Και όταν χρησιμοποιείτε μια χαρτογράφηση μπορείτε να γράψετε:
aDict = {}
aDict[100] = fetchElement()
putElement(fetchElement(), fetchPosition(), aDict)
Και η συνάρτηση putElement
μπορεί να αποθηκεύσει το στοιχείο σε οποιαδήποτε δεδομένη θέση. Και αν πρέπει να ελέγξετε αν η συλλογή σας περιέχει στοιχείο σε δεδομένο δείκτη είναι πιο πυθωνικό να γράψετε:
if anIndex in aDict:
print "cool!"
παρά:
if not myList[anIndex] is None:
print "cool!"
Δεδομένου ότι το τελευταίο υποθέτει ότι κανένα πραγματικό στοιχείο της συλλογής σας δεν μπορεί να είναι None
. Και αν αυτό συμβεί - ο κώδικάς σας δεν συμπεριφέρεται σωστά.
Και αν χρειάζεστε απεγνωσμένα απόδοση και γι'αυτό προσπαθείτε να προ-αρχικοποιήσετε τις μεταβλητές σας, και να γράψετε τον ταχύτερο δυνατό κώδικα - αλλάξτε γλώσσα. Ο γρηγορότερος κώδικας δεν μπορεί να γραφτεί σε Python. Θα πρέπει να δοκιμάσετε τη C αντ' αυτού και να υλοποιήσετε wrappers για να καλείτε τον προ-αρχικοποιημένο και προ-μεταγλωττισμένο κώδικά σας από την Python.
Χωρίς να γνωρίζετε περισσότερα για τον προβληματικό τομέα, είναι δύσκολο να απαντήσω στην ερώτησή σας. Αν δεν είστε σίγουροι ότι πρέπει να κάνετε κάτι περισσότερο, ο πυθωνικός τρόπος για να αρχικοποιήσετε μια λίστα είναι:
<pre>, verts = [] </pre>,
Βλέπετε πραγματικά πρόβλημα απόδοσης; Αν ναι, ποιο είναι το πρόβλημα απόδοσης; Μην προσπαθείτε να λύσετε ένα πρόβλημα που δεν έχετε. Είναι πιθανό ότι το κόστος απόδοσης για τη δυναμική συμπλήρωση ενός πίνακα σε 1000 στοιχεία είναι εντελώς άσχετομε το πρόγραμμα που πραγματικά προσπαθείτε να γράψετε.
Η κλάση array είναι χρήσιμη αν τα πράγματα στη λίστα σας πρόκειται πάντα να είναι ένας συγκεκριμένος πρωτόγονος τύπος σταθερού μήκους (π.χ. char, int, float). Αλλά, δεν'απαιτεί ούτε προ-αρχικοποίηση.