Asrarahmed Kadri wrote: > #Implementation of Pascal Triangle > > num_of_lines = input("How many lines you want to display") > > list1 = [] > > for i in range(num_of_lines): > flag = 0 > tmp = [] > for j in range(i+1): > if flag == 0 or j == i: > tmp.append(1) # for the first or teh last element of the line > flag = 1 > else: > tmp.append(list1[i-1][j-1]+list1[i-1][j]) # for rest, add > teh numbers in previous row > > list1.append(tmp)
That's good. You could shorten it a little by getting rid of flag and just testing for j==0 or j==i. Here is another way to do it, it requires priming the output with the first row but the loop is a little shorter: In [1]: binom = [[1]] In [3]: for i in range(5): ...: prev = binom[i] ...: next = [1] + [ prev[j]+prev[j+1] for j in range(len(prev)-1) ] + [1] ...: binom.append(next) ...: ...: In [4]: binom Out[4]: [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]] There's a truly hideous one-liner hidden in your solution. It uses nested list comprehensions, a hack to refer to the list being built within a list comp, and the new conditional expression. Be careful who you show this too, it may scare dogs and small children ;) It does actually work: list1 = [ [ locals()["_[1]"][i-1][j-1]+locals()["_[1]"][i-1][j] if (j != 0 and j != i) else 1 for j in range(i+1) ] for i in range(num_of_lines) ] Now we know why conditional expressions were added to Python 2.5! See this recipe for details about the locals() hack: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/204297 Sorry I couldn't resist :-) Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor