Αν θέλετε να ανακατέψετε (να ταξινομήσετε τυχαία) τα στοιχεία μιας λίστας (πίνακα) στην Python, χρησιμοποιήστε την ενότητα random της τυπικής βιβλιοθήκης.
Υπάρχουν δύο συναρτήσεις: η shuffle(), η οποία ταξινομεί τυχαία την αρχική λίστα, και η sample(), η οποία επιστρέφει μια νέα τυχαία ταξινομημένη λίστα.Η sample() μπορεί να χρησιμοποιηθεί για συμβολοσειρές και πλειάδες.
- Ανακατέψτε την αρχική λίστα:
random.shuffle()
- Δημιουργήστε μια νέα, ανακατεμένη λίστα.:
random.sample()
- Ανακατέψτε συμβολοσειρές και πλειάδες
- Καθορισμός του σπόρου τυχαίων αριθμών
Αν θέλετε να ταξινομήσετε με αύξουσα ή φθίνουσα σειρά αντί για τυχαία ή με αντίστροφη σειρά, ανατρέξτε στο ακόλουθο άρθρο.
Ανακατέψτε την αρχική λίστα: random.shuffle()
Η συνάρτηση shuffle() στην ενότητα random μπορεί να ταξινομήσει τυχαία την αρχική λίστα.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Δημιουργήστε μια νέα, ανακατεμένη λίστα.: random.sample()
Η συνάρτηση sample() στην ενότητα random μπορεί να χρησιμοποιηθεί για τη δημιουργία μιας νέας λίστας με τυχαία ταξινόμηση, χωρίς να αλλάξει η αρχική λίστα.
Η sample() είναι μια συνάρτηση που επιλέγει τυχαία και ανακτά ένα στοιχείο από μια λίστα. Το πρώτο όρισμα είναι μια λίστα και το δεύτερο όρισμα είναι ο αριθμός των στοιχείων που πρέπει να ανακτηθούν. Ανατρέξτε στο ακόλουθο άρθρο για λεπτομέρειες.
Αν ο αριθμός των στοιχείων που θα επιλεγούν από την sample() είναι ο συνολικός αριθμός των στοιχείων της λίστας, θα λάβουμε μια νέα λίστα με όλα τα στοιχεία τυχαία ταξινομημένα. Ο συνολικός αριθμός των στοιχείων της λίστας προκύπτει από την len().
Το αρχικό αντικείμενο δεν θα αλλάξει.
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
lr = random.sample(l, len(l))
print(lr)
# [0, 3, 1, 4, 2]
print(l)
# [0, 1, 2, 3, 4]
Ανακατέψτε συμβολοσειρές και πλειάδες
Οι συμβολοσειρές και οι πλειάδες είναι αμετάβλητες, οπότε αν χρησιμοποιήσετε την random.shuffle() για να αλλάξετε το αρχικό αντικείμενο, θα λάβετε το ακόλουθο σφάλμα.TypeError
s = 'abcde'
# random.shuffle(s)
# TypeError: 'str' object does not support item assignment
t = tuple(range(5))
print(t)
# (0, 1, 2, 3, 4)
# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment
Αν θέλετε να ανακατέψετε ένα αλφαριθμητικό ή μια πλειάδα, χρησιμοποιήστε την random.sample(), η οποία δημιουργεί ένα νέο αντικείμενο.
Ακόμη και όταν ένα αλφαριθμητικό ή μια πλειάδα καθορίζεται ως όρισμα, η random.sample() επιστρέφει μια λίστα, οπότε είναι απαραίτητο να την επεξεργαστείτε ξανά σε αλφαριθμητικό ή πλειάδα.
Στην περίπτωση μιας συμβολοσειράς, πρόκειται για μια λίστα χαρακτήρων έναν προς έναν. Για να τους ενώσετε ξανά σε ένα ενιαίο αλφαριθμητικό, χρησιμοποιήστε τη μέθοδο join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Για πλειάδες, χρησιμοποιήστε την tuple(), η οποία δημιουργεί μια πλειάδα από μια λίστα.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Καθορισμός του σπόρου τυχαίων αριθμών
Δίνοντας έναν αυθαίρετο ακέραιο αριθμό στη συνάρτηση seed() της random module, μπορεί να καθοριστεί ο σπόρος τυχαίων αριθμών και να αρχικοποιηθεί η γεννήτρια τυχαίων αριθμών.
Μετά την αρχικοποίηση με τον ίδιο σπόρο, η αναδιάταξη γίνεται πάντα με τον ίδιο τρόπο.
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]