list comprehension return a list and sum over in loop

Peter Otten __peter__ at web.de
Fri Dec 12 04:13:32 EST 2014


KK Sasa wrote:

> Mark Lawrence於 2014年12月12日星期五UTC+8下午3時17分43秒寫道:
>> On 12/12/2014 06:22, KK Sasa wrote:
>> > Hi there,
>> >
>> > The list comprehension is results = [d2(t[k]) for k in xrange(1000)],
>> > where d2 is a function returning a list, say [x1,x2,x3,x4] for one
>> > example. So "results" is a list consisting of 1000 lists, each of
>> > length four. Here, what I want to get is the sum of 1000 lists, and
>> > then the result is a list of length four. Is there any efficient way to
>> > do this? Because I found it is slow in my case. I tried sum(d2(t[k])
>> > for k in xrange(1000)), but it returned error: TypeError: unsupported
>> > operand type(s) for +: 'int' and 'list'. Thanks.
>> >
>> 
>> I think you need something like this
>> http://stackoverflow.com/questions/19339/a-transpose-unzip-function-in-python-inverse-of-zip
>> 
>> I'll let you add the finishing touches if I'm correct :)
>> 
>> --
>> My fellow Pythonistas, ask not what our language can do for you, ask
>> what you can do for our language.
>> 
>> Mark Lawrence
> 
> Hi Mark and Yotam,
>   Thanks for kind reply. I think I didn't make my problem clear enough.
>   The slow part is "[d2(t[k]) for k in xrange(1000)]". In addition, I
>   don't need to construct a list of 1000 lists inside, but my aim is to
>   get the sum of all "d2(t[k])". I wonder if there is any method to sum up
>   efficiently.

If that is slow the culprit is probably the d2() function. If so 

results = [0] * 4
for k in xrange(1000):
    for i, v in enumerate(d2(t[k])):
        results[i] += v

won't help. Can you tell us what's inside d2()?




More information about the Python-list mailing list