毕达哥拉斯三胞胎

2024-10-01 19:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找出毕达哥拉斯三元组的所有“a”和“b”值。例如,我将指定数字作为参数,并找到它的所有毕达哥拉斯三元组。下面是我老师给我的一些示例代码:

>>> pytriples(5)
>>> [3,4,5] #would return this
>>> pytriples(25)
>>> [7,24,25] #would return this
>>> [15,20,25] #would return this

基本上,我需要编写pytriples程序,并且因为没有重复“a”和“b”而得到满分。这是我开发的-问题是,我没有任何方法删除重复。在

这就是我所拥有的:

^{pr2}$

Tags: 方法代码程序示例参数return数字老师
3条回答

不知道这是不是你想要的。。在

您可以从三元组的列表中删除重复项,例如

假设你得到了list l中的所有三胞胎

In [39]: l
Out[39]: [(1, 2, 3), (2, 3, 4), (2, 1, 3)]

从中删除所有重复项

^{pr2}$

然后可以将其转换为list以进行进一步处理

In [41]: list(set(map(tuple, [sorted(x) for x in l])))
Out[41]: [(2, 3, 4), (1, 2, 3)]

就你而言

修改循环中迭代的列表不是个好主意

因为只要移除假设项1,item2就变成item1,但是循环已经在list中迭代item1,所以检查将被跳过,并且您将无法获得所需的输出

考虑一个小例子

In [43]: l
Out[43]: [(1, 2, 3), (2, 3, 4), (2, 1, 3)]

In [44]: for i in l:
   ....:     if i[0] == 2:
   ....:         l.remove(i)
   ....:

In [45]: l
Out[45]: [(1, 2, 3), (2, 1, 3)]

在迭代列表时修改列表是to be avoided。在

通过简单的列表理解,可以按照您想要的方式删除元素:

newlist = [triplet for triplet in newlist if triplet[0] < triplet[1]]

不要将重复项放入数组中,然后使用一个过程将它们取出,只要不要将它们放在数组中。你可以改变

        newlist.append([a,b,c])

^{pr2}$

并删除for i in newlist:循环及其所有内容。在

(注意,a不能等于b,因为sqrt(2)是无理的。)

相关问题 更多 >

    热门问题