Προς το περιεχόμενο

[Python]Σπάσιμο λίστας σε υπολίστες ιδίου μήκους χωρίς επαναλήψεις στην υπολίστα


masteripper

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Γεια χαρά σε όλους.

Ψάχνω 1 σπάσιμο λίστας  (το οποίο μπορεί να γίνει με Loop απλώς λέω μήπως το αποφύγω)  το οποίο να επιστρέφει υπολίστες ιδίου μήκους αλλά να μην επαναλαμβάνονται τα στοιχεία στην υπολίστα

π.χ

[93, 69, 29, 30, 78, 97, 66, 19, 19]

Η ανωτέρω λίστα θέλω να την σπάσω σε 3 (χ) υπολίστες αλλά απαραίτητα η υπολίστα να μην έχει διπλά

π.χ

[93,69,19]

[29,30,78]

[66,19,97]

Το σπάσιμο θα είναι δυναμικό δλδ δεν θα πηγαίνει με την σειρά....εκτός αν είναι αναγκαίο (το οποίο θα με αναγκασει να κάνω 1 επιπλέον σορτάρισμα)

 

Επεξ/σία από masteripper
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ενας τροπος με χρηση βιβλιοθηκων:

Χωρις βιβλιοθηκες δε νομιζω πως μπορεις να αποφυγεις τα loops

from collections import Counter
import random

l = [93, 69, 29, 30, 78, 97, 66, 19, 19]

d = dict(Counter(l))

res = []

while True:
    new = random.sample(d.keys(), 3)
    res.append(new)
    for x in new:
        d[x] -= 1
    d = {k:v for k, v in d.items() if v!=0}
    if len(d)==0:
        break

print(res)
#[[93, 66, 97], [29, 19, 69], [78, 30, 19]]

    

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δυστυχως χωρίς loop δεν βγαίνει...ήλπιζα σε κανένα κολπάκι

base_list = [93,69,29,30,78,97,66,19,19]
list_of_lists = list(zip(*(iter(base_list),) * 3))
loop_condition = True
while loop_condition:
    i=1
    for sublist in list_of_lists:
        if  len(sublist) == len(set(sublist)):
                if i == len(list_of_lists):
                    loop_condition = False
                i += 1
                pass
        else:
            random.shuffle(base_list)
            list_of_lists = list(zip(*(iter(base_list),) * 3))
            break
  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρόβλημα να πω την αλήθεια δεν το κατάλαβα καθόλου και το αυθαίρετο παράδειγμα με μπέρδεψε. Γιατί θες παραδείγματος χαρίν 3 υπολίστες και όχι 2, είναι τυχαίο ότι η λίστα σου έχει αριθμό στοιχείων πολλαπλάσιο του 3?

Γενικά όμως όταν έχουμε να κάνουμε με πολλά δεδομένα και θέλουμε να τα προσπελάσουμε υπάρχουν 2 τρόποι οι λούπες for, while klp και η αναδρομή. Η συνάρτηση δηλαδή καλεί τον εαυτό της.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

17 ώρες πριν, k33theod είπε

Το πρόβλημα να πω την αλήθεια δεν το κατάλαβα καθόλου και το αυθαίρετο παράδειγμα με μπέρδεψε. Γιατί θες παραδείγματος χαρίν 3 υπολίστες και όχι 2, είναι τυχαίο ότι η λίστα σου έχει αριθμό στοιχείων πολλαπλάσιο του 3?

Γενικά όμως όταν έχουμε να κάνουμε με πολλά δεδομένα και θέλουμε να τα προσπελάσουμε υπάρχουν 2 τρόποι οι λούπες for, while klp και η αναδρομή. Η συνάρτηση δηλαδή καλεί τον εαυτό της.

Ναι η αναδρομή είναι η 2η λύση απλώς είναι λίγο πιο κουραστική στην ιχνηλάτηση.

Πάντως με την λούπα επειδή την δοκίμασα σε όλες τις εκδοχές δουλεύει όπως πρέπει

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...