Я пытаюсь отфильтровать повторяющееся вхождение числа из входной строки. Если строка содержит повторяющиеся символы, она должна вывести «Недопустимое число», если на входе нет повторяющихся символов, она должна вывести «Действительное число». Какой правильный способ проверки? повторяющееся вхождение

input_number = raw_input("Please input the number:")
print type(input_number)
if (int(sorted(input_number))):
    print "Not a valid number"
else:
    print "Valid number"

Я получаю следующую ошибку:

TypeError: int() argument must be a string or a number, not 'list'
-4
Chinmoy 31 Авг 2017 в 12:25

3 ответа

Лучший ответ

Преобразовать в set и измерить его размер.

if len(set(input_number)) != len(input_number):
    print "Not a valid number"
else:
    print "Valid number"

Если строка содержит дубликаты, преобразование ее в эквивалент set приведет к уменьшению размера, поэтому размер set не будет такого же размера, как у str.

2
cs95 31 Авг 2017 в 09:39

sorted() возвращает список, а int() не может принимать список в качестве аргумента. Чтобы выполнить то, что вы хотите сделать (проверьте, содержит ли вход дубликаты), нужно сделать

set(input_number)

Затем проверьте, равен ли размер набора len(input_number), вы получите размер набора просто с помощью len(set(input_number)). Если да, все персонажи уникальны. Если нет, некоторые символы повторяются и обрезаются, потому что set() подобен набору в математике, он содержит только уникальные элементы. Так что, если не все элементы в input_number уникальны, размер набора будет меньше.

Весь код будет примерно таким:

input_number = raw_input()
if len(input_number) == len(set(input_number)):
    print "Valid number"
else:
    print "Not a valid number"
2
campovski 31 Авг 2017 в 09:40

Чтобы получить дубликаты в списке

>>> from collections import Counter
>>> 
>>> st = "12456432"
>>> 
>>> [item for item, count in Counter(st).items() if count > 1]
['2', '4']
>>> 

Для вас Решение 1

>>> if len([item for item, count in Counter(st).items() if count > 1]) > 0:
...     print "invaild"
... else: 
...     print "vaild"
... 
invaild
>>> 

Другое решение 2

Список имеет метод count, он не возвращает ни одной строки в списке

>>> for item in st:
...     if st.count(item) > 1:
...         print "invailed"
...         break
...     else:
...         print "vailed"
... 
vailed
invailed
2
Kallz 7 Сен 2017 в 16:49