毕达哥拉斯三元组的列表理解

2024-05-29 06:27:01 发布

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

我是Python新手,想学习如何使用列表理解。在

我有一段代码,它打印出一个比用户输入值n小的三元组列表:

n = int(input("Enter the value of n:"))

a = 0
b = 0
c = 0
m = 2
triples = []

while c < n:
    for i in range(1, m, 1):
        a = m*m - i*i
        b = 2*m*i
        c = m*m + i*i
        if c > n:
            break
        triples.append((a, b, c))
    m += 1

print(triples)

它有点管用,但是我想用Python中的列表理解来做同样的事情我们怎么能做到呢?在

例如,如果我输入17,输出应该是[(3,4,5), (8,6,10),(5,12,13), (15,8,17), (9,12,15)],但是我没有得到(9,12,15)。在


Tags: ofthe代码用户in列表forinput
2条回答

看看official python documentation for list comprehensions它解释了它们是如何工作得很好的。在

至于你的实际问题,以下应该是一个等价的列表理解,可以打印出Pythagorean triples直到n

n = int(input("Enter the value of n:"))

print([(a,b,c) for a in range(1,n+1) for b in range(a,n+1) for c in range(b,n+1) if a**2 + b**2 == c**2])

希望您清楚当前代码中的问题:)

示例用法:

^{pr2}$

您可以使用itertools。试试这个-

import itertools

n = int(input("Enter the value of n:"))

print([(a,b,c) for a, b, c in itertools.product(range(1,n+1), repeat=3) if a**2 + b**2 == c**2])

要了解有关itertoolsproduct的更多信息,请访问以下链接- https://docs.python.org/3/library/itertools.html#itertools.product

使用product我们得到一个由3个元素组成的元组,我们将其解压为三个变量a、b、c,并使用理解来仅包含那些满足if条件的元组。在

但是,此代码生成重复项,如(3,4,5)和(4,3,5)

要删除重复项,可以像这样轻松地修改if语句-

^{pr2}$

此修改后的代码将为n=17-

[(3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15)]

相关问题 更多 >

    热门问题