TypeError:int()参数必须是字符串或数字,而不是' list'在尝试排序字符串时

时间:2017-08-31 09:25:20

标签: python python-2.7 python-3.x

我正在尝试从输入字符串中过滤重复出现的数字 如果字符串包含重复字符,那么它必须打印"不是有效数字,如果输入没有重复字符,则必须打印"有效数字" 检查重复发生的正确方法是什么

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'

3 个答案:

答案 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