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

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

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

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

Ψάχνω 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η λύση απλώς είναι λίγο πιο κουραστική στην ιχνηλάτηση.

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

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

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

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

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

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

Σύνδεση

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

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