Permütasyon neden hatalı?

Sam Bridges

Hectopat
Katılım
6 Nisan 2020
Mesajlar
732
Makaleler
2
Çözümler
1
Yer
İzmir
Daha fazla  
Cinsiyet
Erkek
Python:
import itertools

def next_smaller(n):
 digits_list = []

 for char in str(n):
 digits_list.append((int(char)))

 digits_list.sort()

 possible_numbers_list = list(itertools.permutations(digits_list))

 for item in possible_numbers_list:
 repetition = possible_numbers_list.count(item)
 if repetition > 1:
 for rep in range(repetition - 1):
 possible_numbers_list.remove(item)

 print(len(possible_numbers_list))

next_smaller(111456)

Kodda itertools ile permütasyon bulduğumda tekrarları çıkarmak için böyle bir kod yazdım. 111116 için bir sıkıntı yok, ancak neden 111456 gibi bir sette 120 yerine 145 farklı set buluyor? Bazı "farklı" setler de yanlış üstelik. Birden 1 tane olacağı yerde 6 tane 116451 var, gibi. Şimdiden çok teşekkür ederim.
 
Sadece saymanız mı gerekiyor yoksa tüm permütasyonların tekrar edenler silinmiş biçimde listede mi olmasını istiyorsunuz?

remove fonksiyonu ilk gördüğünü siler yani birden fazla tekrar edenlerde bazılarını es geçmiş oluyorsunuz. set kullanarak tekrar eden elementleri listeden silmek çok daha kolay.

Python:
import itertools

def next_smaller(n):
    n = str(n)
    possible_numbers_list = set(itertools.permutations(n))
    print(len(possible_numbers_list))

next_smaller(111456)
 
Son düzenleyen: Moderatör:

Technopat Haberler

Yeni konular

Geri
Yukarı