扩展列表理解选项 - Python
Extended list comprehension options - Python
我将使用 Project Euler 练习中的代码示例。
[(a, b, c) for a in range(1, 334) for b in range(1, 334) for c in range(1,334) if c == 1000 - a - b and a < b and b < c and a**2 + b**2 == c**2]
我对列表理解知之甚少,但想知道是否有一种方法可以暗示 a、b、c 是 > 0 的整数,并且您想递增它们
两个伪代码示例可能是这样的:
[(a, b, c) for a > 0 for b > a for c > b if c == 1000 - a - b]
[(a, b, c) for int(a) for int(b) for int(c) if c == 1000 - a - b]
是否可以这样做?
这里是对你的方法的简化:
[(a, b, 1000 - a - b) for a in range(1, 332) for b in range(a+1, 333) if a**2 + b**2 == (1000 - a - b)**2]
c
是固定的,它总是 1000 - a - b
所以不需要循环
它的价值。
您可以将 b
的范围设为 range(a+1,333)
,这样您就不必
测试是否 b>a
虽然我认为它作为问题的解决方案是错误的
我将使用 Project Euler 练习中的代码示例。
[(a, b, c) for a in range(1, 334) for b in range(1, 334) for c in range(1,334) if c == 1000 - a - b and a < b and b < c and a**2 + b**2 == c**2]
我对列表理解知之甚少,但想知道是否有一种方法可以暗示 a、b、c 是 > 0 的整数,并且您想递增它们
两个伪代码示例可能是这样的:
[(a, b, c) for a > 0 for b > a for c > b if c == 1000 - a - b]
[(a, b, c) for int(a) for int(b) for int(c) if c == 1000 - a - b]
是否可以这样做?
这里是对你的方法的简化:
[(a, b, 1000 - a - b) for a in range(1, 332) for b in range(a+1, 333) if a**2 + b**2 == (1000 - a - b)**2]
c
是固定的,它总是1000 - a - b
所以不需要循环 它的价值。您可以将
b
的范围设为range(a+1,333)
,这样您就不必 测试是否b>a
虽然我认为它作为问题的解决方案是错误的