我是编程初学者。我在 Geeks for Geeks 上看到了关于缺失数字的挑战。提供的解决方案对我来说相当复杂。我想知道我的解决方案是否正确,因为它看起来太简单了。谢谢!
A = [1, 2, 3, 4, 5, 7]
def missing():
for i in range (len(A)):
if A[i+1] != A[i] + 1:
return A[i] + 1
missing()
这是您的示例,但具有列表理解。这将允许您返回所有缺失号码的列表。请记住,您的解决方案仅适用于间隙 == 1。
A = [1, 3, 4, 5, 7]
def missing(A):
x = [A[i] + 1 for i in range (len(A)-1) if A[i+1] != A[i] + 1]
return x
print(missing(A))
输出
[2, 6]
我想说你的代码非常不稳定,但它可能会工作。
我想说这效果更好
A = [1, 2, 3, 4, 5, 7]
def missing():
for i in range(len(A)):
result = 0
if A[i+1] != A[i] + 1:
result A[i] + 1
return result
missing()
但是如果 1 是缺失的数字怎么办?
下面的代码允许 1 成为缺失的数字
A = [1, 2, 3, 4, 5, 7]
def missing():
if A[0] != 1:
result = 1
return result
for i in range(len(A)):
result = 0
if A[i+1] != A[i] + 1:
result A[i] + 1
return result
missing()
您只需检查从列表中的第一个元素到列表中的最后一个元素的数字范围内的每个数字是否都存在于列表中。
for
循环:
>>> def missing_num(numlist):
numlist.sort()
missing = []
for i in range(numlist[0], numlist[-1]+1):
if i not in numlist:
missing.append(i)
return missing
>>> missing_num([1, 2, 3, 4, 5, 7])
[6]
列表理解:
>>> def missing_num(numlist):
numlist.sort()
nums = list(range(numlist[0], numlist[-1]+1))
return [i for i in nums if i not in numlist]
>>> missing_num([1, 2, 3, 4, 5, 7])
[6]
一些随机列表:
>>> for _ in range(5):
randlist = random.sample(list(range(10)), 7)
print(randlist, missing_num(randlist))
[1, 2, 3, 4, 5, 7, 9] [6, 8]
[0, 1, 2, 5, 6, 7, 8] [3, 4]
[0, 1, 3, 4, 5, 6, 9] [2, 7, 8]
[2, 4, 5, 6, 7, 8, 9] [3]
[0, 2, 3, 4, 5, 7, 8] [1, 6]
你还可以使用python中的enumerate方法来迭代列表并检查列表中缺少的元素,这是程序
arr = [1, 2, 3, 6,8,10,15]
arr2 = []
for index,value in enumerate(arr):
if index < len(arr)-1:
if value+1 != arr[index+1]:
difference = (arr[index+1])-(value+1)
for i in range(value+1,value + difference + 1):
arr2.append(i)
print(arr2)
该方法使用枚举函数来迭代列表。
首先检查当前索引是否超出列表,这可能会抛出索引错误。
然后它会检查当前值和下一个索引值之间的差异,如果下一个索引的值不比前一个索引+1,那么它将进入循环并查找当前值和下一个索引值之间的差异。之后将进入另一个循环,范围为 currentValue +1 到 currentValue + Difference + 1 并将缺失的数字附加到另一个列表 arr2 中。 现在这个列表包含了 arr 列表中缺少的所有数字。