使用Python列表理解计算毕达哥拉斯长度?

Cai*_*inG 0 python list-comprehension

我试图将以下Haskell代码移植到Python中,我正在接受"无效语法"响应.

let rightTriangles' = [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2, a+b+c == 24]
Run Code Online (Sandbox Code Playgroud)

我的失败尝试如下:

[(i,j,k) for i in range(1,11) for j in range(1,i+1) for k in range(1,j+1) if i**2 + j**2 == k**2 i + j + k == 24]
Run Code Online (Sandbox Code Playgroud)

Python 3.4.4

sch*_*ggl 8

您可能正在寻找:

>>> [
...    (i, j, k) 
...    for i in range(1, 11) 
...        for j in range(i, 11)      # j >= i
...            for k in range(j, 11)  # k >= j 
...                if i**2 + j**2 == k**2 and i + j + k == 24
... ]
[(6, 8, 10)]
Run Code Online (Sandbox Code Playgroud)

请注意,您需要使用范围表示法中的逗号,and条件之间的逗号,并且(从第一个条件判断)k应该是三者中最大的一个,因此您宁愿选择范围i <= j <= k.

i < j < k 可以省去一些不必要的迭代,因为我们知道斜边严格地长于没有毕达哥拉斯三角形等腿的腿.

  • @cᴏʟᴅsᴘᴇᴇᴅ:D THX,也用于编辑.使它更具可读性.嗯......我过早地回答了这个问题...... (2认同)