在python中查找任意长度的元组的中点



我需要取一个任意长度的元组,并执行一个返回中点的操作。但是,我需要一个函数来处理任何长度的元组,所以我不确定如何去做。

def findMidpoint(P: tuple, Q: tuple) -> tuple:
user_input1 = input('Enter space-separated integers: ')
P = tuple(int(item) for item in user_input1.split())
user_input2 = input('Enter space-separated integers: ')
Q = tuple(int(item) for item in user_input2.split())
Midpoint 
pass
def main():
# use to test the findMidpoint function
pass
if __name__ == "__main__":
main()

好的,在这里对你的问题进行一些自由处理,但假设你想要找到n维空间中任意两个点的中点,你可以对每个点的轴向值求平均值。例如:

P = (px, py)
Q = (qx, qy)
midpoint = ( (px + qx)*0.5, (py + qy)*0.5 ) 

显然,对于更多维度,你必须扩展它。对于您的代码,一般的n维解决方案可以使用zip:

def findMidpoint(P: tuple, Q: tuple) -> tuple:
return tuple((q + p) / 2 for p, q in zip(P, Q))

def main():
# use to test the findMidpoint function
assert findMidpoint(P=(0, 0), Q=(2, 2)) == (1, 1)
assert findMidpoint(P=(0, 0, 0), Q=(2, 2, 2)) == (1, 1, 1)
assert findMidpoint(P=(-2, -2, -2), Q=(2, 2, 2)) == (0, 0, 0)

if __name__ == "__main__":
main()

假设p和Q的长度相同。如果它们不是,你可以更进一步,使用zip_longest:

from itertools import zip_longest
def findMidpoint(P: tuple, Q: tuple) -> tuple:
return tuple((q + p) / 2 for p, q in zip_longest(P, Q, fillvalue=0))

def main():
# use to test the findMidpoint function
assert findMidpoint(P=(0, 0), Q=(2, 2, 2)) == (1, 1, 1)

if __name__ == "__main__":
main()

这实际上是在说"如果没有给定轴的坐标,则假定它是零"

相关内容

  • 没有找到相关文章

最新更新