Masz listę numerów i chcesz odfiltrować te liczby, które zawierają unikalne cyfry, tj. Każda cyfra może wystąpić tylko raz w liczbie.Jak filtrować liczby zawierające unikalne cyfry?
pozytywne przykłady:
- 58293,6
- 0,1246
ujemne przykładów:
- 9585 (5 występuje dwukrotnie)
- 58293.666 (6 występuje trzykrotnie)
- 0,12461 (1 występuje dwukrotnie)
Jak to zrobić? Moim pomysłem jest przekonwertowanie każdej liczby na ciąg znaków, a następnie sprawdzenie, czy rozmiar zestawu złożonego ze znaków ciągu jest równy długości łańcucha. Coś w tym stylu:
def uniques(numbers):
for number in numbers:
str_number = str(number)
if len(set(str_number)) == len(str_number):
yield number
for i in uniques(xrange(1000, 1050)):
print i
1023
1024
1025
1026
1027
1028
1029
1032
1034
1035
1036
1037
1038
1039
1042
1043
1045
1046
1047
1048
1049
Czy istnieje sposób, aby to zrobić bez konwersji liczb całkowitych na ciągi?
Nie konwertuj z powrotem. Weź inną zmienną dla usztywnionej wersji numeru. – Matthias
Szczególnie jeśli twoje wejście zawiera 'float's ... –
Poza tym, myślę, że twoje podejście jest proste i łatwe do zrozumienia. Poszedłbym z tym. –