Em Ter, 2006-02-14 às 20:14 -0800, Farel escreveu: > Which is Faster in Python and Why? > > jc = {}; m = [] > x = [ [1,2,3,4,5,6,7,8,9],[..],.......] # upwards of 10000 entries > def binm() > for item in x: > b = item[:]; b.sort(); bc = 0 > for bitem in b: bc += int(bitem) > try: m = jc[bc] > except: m = [] > if not b in m: > m.append(b); jc[bc]=m
Why do you copy the list and sort it if you're just summing its elements? Instead of b = item[:]; b.sort(); bc = 0 for bitem in b: bc += int(bitem) you can do just bc = sum(int(i) for i in item) or, if the order *really* matters, what is very strange, you can do bc = sum(int(i) for i in sorted(item)) Another thing, if you want to have in the values of the dictionary jc only unique elements, you can use sets: >>> a = set() >>> print a set([]) >>> a.add(10) >>> print a set([10]) >>> a.add(10) >>> print a set([10]) >>> a.add(10) >>> print a set([10]) So, the final example would be (assuming that you don't need to sum in order): def binm(): for item in x: bc = sum(int(i) for i in item) try: jc[bc].add(b) except KeyError: jc[bc] = set([b]) Looks prettier, have less statements and is (or should be) faster. This only works in Python 2.4, but you can adapt it to run on other versions, too. Cheers, Felipe. -- "Quem excele em empregar a força militar subjulga os exércitos dos outros povos sem travar batalha, toma cidades fortificadas dos outros povos sem as atacar e destrói os estados dos outros povos sem lutas prolongadas. Deve lutar sob o Céu com o propósito primordial da 'preservação'. Desse modo suas armas não se embotarão, e os ganhos poderão ser preservados. Essa é a estratégia para planejar ofensivas." -- Sun Tzu, em "A arte da guerra" -- http://mail.python.org/mailman/listinfo/python-list