繁体   English   中英

在数字序列中查找丢失的数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM