gpt4 book ai didi

python - 有没有更好的方法在python中编写以下方法?

转载 作者:太空狗 更新时间:2023-10-30 02:29:58 25 4
gpt4 key购买 nike

我正在用 Python 编写一个小程序,它将从算术级数中找到一个单独缺失的元素(其中起始元素可以是正数也可以是负数,序列可以是升序或降序)。

例如:如果输入是 1 3 5 9 11,那么函数应该返回 7,因为这是上述 AP 系列中唯一缺失的元素。输入格式:输入元素由 1 个空格分隔,而不是通常采用的逗号分隔。

代码如下:

def find_missing_elm_ap_series(n, series):
ap = series
ap = ap.split(' ')
ap = [int(i) for i in ap]
cd = []
for i in range(n-1):
cd.append(ap[i+1]-ap[i])
common_diff = 0

if len(set(cd)) == 1:
print 'The series is complete'
return series
else:
cd = [abs(i) for i in cd]
common_diff = min(cd)
if ap[0] > ap[1]:
common_diff = (-1)*common_diff


new_ap = []
for i in range(n+1):
new_ap.append(ap[0] + i*common_diff)

missing_element = set(new_ap).difference(set(ap))
return missing_element

其中 n 是提供的系列的长度(上面示例中缺少元素的系列:5)。

我相信还有其他更短、更优雅的方法可以用 python 编写这段代码。有人可以帮忙吗?谢谢顺便说一句:我正在自学 python,因此才有这个问题。

最佳答案

基于这样的事实,如果一个元素缺失,它恰好是 expected-sum(series) - actual-sum(series)n 元素从 a 开始到 b 结束的系列的预期总和是 (a+b)*n/2 。剩下的就是 Python:

def find_missing(series):
A = map(int, series.split(' '))
a, b, n, sumA = A[0], A[-1], len(A), sum(A)

if (a+b)*n/2 == sumA:
return None #no element missing

return (a+b)*(n+1)/2-sumA

print find_missing("1 3 5 9") #7
print find_missing("-1 1 3 5 9") #7
print find_missing("9 6 0") #3
print find_missing("1 2 3") #None
print find_missing("-3 1 3 5") #-1

关于python - 有没有更好的方法在python中编写以下方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29885261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com