[英]Find lost number in number sequence
好的,所以基本上我所要做的就是按顺序找到丢失的号码。
对于输入数据:
5
2 3 1 5
正确答案是
4
def findMissing(n):
tempList = []
for i in range(0, n-1):
tempList.append(str(input()))
return [x for x in range(tempList[0], tempList[-1]+1) if x not in tempList]
findMissing(5)
Output:
---> 11 return [x for x in range(tempList[0], tempList[-1]+1) if x not in tempList]
TypeError: must be str, not int
我已经尝试过类似的方法,我想创建一个列表,输入将出现在该列表中,然后我将从该列表中返回缺失的值,但它不起作用。
您可以使用range
生成一set
“完整”序列,然后将set.difference
与给定的数据列表一起使用,然后应该包含缺少的项目。
def findMissing(n, data):
return set(range(1, n+1)).difference(data).pop()
>>> findMissing(5, [2, 3, 1, 5])
4
由于您知道序列是连续的,因此您也可以通过算法来执行此操作
def findMissing(n, data):
return sum(range(1,n+1)) - sum(data)
>>> findMissing(5, [2, 3, 1, 5])
4
这个错误实际上来自这一步:
tempList[-1]+1
重现这种情况的方法是:
'1' + 1
TypeError: must be str, not int
您需要添加类似的类型。 您可以通过执行int(input())
将字符串类型转换为 int 来修复它。
range
也会在str
arguments 上引发错误:
range('1', '3')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer
所以确保你给它 integer arguments。
@Cory Kramer 使用set symmetric difference
回答的另一个变体:
def find_missing(number, data):
return (set(data) ^ set(range(1, number + 1))).pop()
find_missing(5, [2, 3, 1, 5])
>> 4
查看官方文档以获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.