[Tutor] Alternatives to append() for "growing" a list

spir denis.spir at gmail.com
Sun Dec 8 14:31:54 CET 2013


On 12/08/2013 07:14 AM, Amit Saha wrote:
>> >If all of the bitN are strings:
>> >         bit1 + bit2 + bit3 + bit4 + bit5
>> >actually constructs:
>> >         bit1+bit2
>> >         bit1+bit2+bit3
>> >         bit1+bit2+bit3+bit4
>> >         bit1+bit2+bit3+bit4+bit5
>> >A number of unneeded string object, and a very big useless memory weight.
> Thanks Denis, good to know this is how it is done. I hadn't thought
> about it simply because, never have probably concatenated strings
> beyond the simple "adding a new line" to a string.

This is only due to catenation being defined in python as a _binary_ operation. 
In principle, there is no reason for this. In a hypothetical language (I will 
here use Lisp-like syntax just to make a visual difference), one may write:
     (cat bit1 bit2 bit3 bit4 bit5)
Then cat would catenate all bits in one go, into a sigle total string (sum the 
sizes and make a single whole string of this size).

As a side-note, this is also true for common arthmetic operators like + or *, 
which are not conceptually binary, but we have this impression *due to infix 
notation*:
     1 + 2 + 3 + 4 + 5
is usually interpreted as a series of binary operations:
     ((((1 + 2) + 3) + 4) + 5)
but there could well be (and in some languages this is the case):
     (+ 1 2 3 4 5)
in one go (even if behind the stage there are binary ops, just because the 
machine also knows that).

Think at manual sum for illustration:
    123
    456
    789
    ---
result

Maybe infix notation is just wrong for some operations and misleads into wrong 
thinking. We should reserve for actual binary ops, namely - and /; but prefix 
notation, as illustrated above, would nicely do the job for binary pos as well. 
(The same point applies to logical operators or & and, which are not binary, 
while the case of relational ones [comparisons] is more obscure.)
However, unlike the case of catenation, unjustified binary arithmetic operations 
do not cause any other harm than needlessly multiplying function or method 
lookups & calls (if there is a call, which is the case in python because such 
operators can be overloaded).

Denis


More information about the Tutor mailing list