<p>可以使用映射或列表来隐藏循环。你知道吗</p>
<pre><code>def f(x, i):
return lambda x: ...
row = [ [1] * k ]
for i in range(k):
row[i + 1] = map( f(i), row[i])
</code></pre>
<p>其中f是一个函数,该函数依赖于行的前一个元素。你知道吗</p>
<p>另一种可能是使递归Fibbonachi适应行。Numpy库允许数组arifmetics,所以甚至不需要map。python也有预定义的库,用于组合的数量等,也许可以使用。你知道吗</p>
<p>为了有效地计算,无需嵌套循环,请使用基于有理数的解决方案</p>
<p><a href="https://medium.com/@duhroach/fast-fun-with-pascals-triangle-6030e15dced0" rel="nofollow noreferrer">https://medium.com/@duhroach/fast-fun-with-pascals-triangle-6030e15dced0</a>。你知道吗</p>
<pre><code>from fractions import Fraction
def pascalIndexInRowFast(row,index):
lastVal=1
halfRow = (row>>1)
#early out, is index < half? if so, compute to that instead
if index > halfRow:
index = halfRow - (halfRow - index)
for i in range(0, index):
lastVal = lastVal * (row - i) / (i + 1)
return lastVal
def pascDiagFast(row,length):
#compute the fractions of this diag
fracs=[1]*(length)
for i in range(length-1):
num = i+1
denom = row+1+i
fracs[i] = Fraction(num,denom)
#now let's compute the values
vals=[0]*length
#first figure out the leftmost tail of this diag
lowRow = row + (length-1)
lowRowCol = row
tail = pascalIndexInRowFast(lowRow,lowRowCol)
vals[-1] = tail
#walk backwards!
for i in reversed(range(length-1)):
vals[i] = int(fracs[i]*vals[i+1])
return vals
</code></pre>