Ανακατέψτε τα στοιχεία μιας λίστας στην Python

Επιχείρηση

Αν θέλετε να ανακατέψετε (να ταξινομήσετε τυχαία) τα στοιχεία μιας λίστας (πίνακα) στην 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]