Wpis z mikrobloga

Mirki, mam dość elementarne zadanie, ale coś nie mam na nie pomysłu. Mam listę 5 liczb i chcę wypisać wszystkie ich kombinacje w zestawach po 3. Ogólnie mają być bez jakichkolwiek powtórzeń, ale tego to w ogóle nie wiem jak zrobić, więc potem usunę powtórzenia. Jak ktoś ma podpowiedź co do tego to też o nią poproszę bo jednak chciałbym zrobić to też w ten sposób.
Najpierw liczę liczbę zestawów 5*3. Potem chcę zapełnić pierwsze miejsca wkładając tam po kolei liczbę z zadanej listy (counter ma się poruszać 0-1-2-3-4-0-1 itd.) Następnie przemieściłbym się na drugą pozycję, trzecią, no i dalej już sortowanie i usuwanie zbędnych elementów.
Problem jest taki, że wszędzie wrzuca mi ostatnią liczbę z zadanej listy. Jak chcę wypisać liczbę która jest wkładana do zestawu to wypisuje dobrą liczbę. Logicznie ma to chyba sens, jednakże musi tu działać jakiś mechanizm o którym nie wiem.

https://pastebin.com/pDPmxKSe

#naukaprogramowania #python
  • 11
@asterix61: Wydaje mi się że poprawnie dydaktycznie jest najpierw napisać jakieś rozwiązanie i jak się je zrozumie to potem można przejść do korzystania z gotowych elementów. Dalej nie wiem gdzie jest błąd w moim rozwiązaniu co mnie boli. Myślę że jak ogarnę dobrze tę bibliotekę to rozjaśni mi się kwestia rozwiązywania tego typu zadań
@keyg: Rozpisałem sobie na kartce, i z palca wystarczy 6 linijek bez użycia itertools.

u Ciebie największy problem, to 5 linijka.

print(final_ls[0] is final_ls[1]) ta linijka zwróci True, a więc masz listę tych samych list. Listy są mutowalne, i zmiana w jednej tablicy spowoduje zmiany we wszystkich.

Zrobiłeś listę X referencji do tej samej tablicy. Wrzuć ['','',''] w miejsce temp w 5 linijce i otrzymasz już wszystkie kombinacje za pomocą Twojej
@keyg: A jakimś innym rozwiązaniem, które mogę zaproponować, jest:

s = set()
for i, e in enumerate(ls):
for j, f in enumerate(ls[i+1:-1]):
for g in ls[i+j+2:]:
s.add((e,f,g))

Moze ten kod Ci podpowie co zrobić, aby Twój kod zaczął zwracać odpowiedni wynik :)
@asterix61: faktycznie zmiana 4 i 5 linijki sprawia, że program działa poprawnie mimo, że ostateczny wynik jest do dupy i aż wstyd, że tego nie przewidziałem, ale to już któreś podejście do tego zadania i kiełbasi mi się wszystko. Lubię właśnie tak błądzić i wyłapywać takie mechanizmy. To ostatnie rozwiązanie chyba właśnie jest tym czego szukałem, pozwolę sobie podpytać później jakbym miał jakieś pytania bo teraz nie mogę się tym zająć.
@ProfesorBigos: @asterix61: ja na obecnym etapie w codewars, hakkerrank, i na własnych projektach studiuję teraz wbudowane biblioteki w poszukiwaniu funkcji, które już są zrobione i nie ma potrzeby ich samemu pisać. Macie jakieś porady na jak najbardziej efektywne uczenie się poszczególnych frameworków. Czy po prostu takie przeglądanie jak obecnie uskuteczniam powinno przynieść korzyści?
@keyg: żaden problem, pisz na pw jak coś :)

@mactrix: Polecam lekturę tego: https://pymotw.com/3/
Z moich obserwacji najbardziej przydatne w moich 4 latach pracy były: collections, functools, itertools, contextlib, dataclasses, enum, abc.
A resztę to w razie potrzeby sprawdzam, czy we wbudowanych już nie ma takiej biblioteki :)