我正在尝试从输入字符串中过滤重复出现的数字 如果字符串包含重复字符,那么它必须打印"不是有效数字,如果输入没有重复字符,则必须打印"有效数字" 检查重复发生的正确方法是什么
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'
答案 0 :(得分:2)
转换为set
并测量其大小。
if len(set(input_number)) != len(input_number):
print "Not a valid number"
else:
print "Valid number"
如果字符串包含重复项,则将其转换为set
等效项会导致大小减小,因此set
的大小不会与str
相同。< / p>
答案 1 :(得分:2)
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 :(得分:2)
获取列表中的重复项目
>>> 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