osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to concatenate strings with iteration in a loop?


On 21/05/19 8:40 PM, Paul Moore wrote:
> On Tue, 21 May 2019 at 09:25, Frank Millman <frank at chagford.com> wrote:
>>
>> On 2019-05-21 9:42 AM, Madhavan Bomidi wrote:
>>> Hi,
>>>
>>> I need to create an array as below:
>>>
>>> tempStr = year+','+mon+','+day+','+str("{:6.4f}".format(UTCHrs[k]))+','+ \
>>> str("{:9.7f}".format(AExt[k,0]))+','+str({:9.7f}".format(AExt[k,1]))+','+ \
>>> str("{:9.7f}".format(AExt[k,2]))+','+str("{:9.7f}".format(AExt[k,3]))+','+ \
>>> str("{:9.7f}".format(AExt[k,4]))+','+str("{:9.7f}".format(AExt[k,5]))+','+ \
>>> str("{:9.7f}".format(AExt[k,6]))+','+str("{:9.7f}".format(AExt[k,7]))+','+ \
>>> str("{:9.7f}".format(AExt[k,8]))+','+str("{:9.7f}".format(AExt[k,9]))
>>>
>>>
>>> k is a row index
>>>
>>> Can some one suggest me how I can iterate the column index along with row index to concatenate the string as per the above format?
>>>
>>> Thanks in advance
>>>
>>
>> The following (untested) assumes that you are using a reasonably
>> up-to-date Python that has the 'f' format operator.
>>
>> tempStr = f'{year},{mon},{day},{UTCHrs[k]:6.4f}'
>> for col in range(10):
>>       tempStr += f',{AExt[k, col]:9.7f}'
>>
> 
> As a minor performance note (not really important with only 10 items,
> but better to get into good habits from the start):
> 
> temp = [f'{year},{mon},{day},{UTCHrs[k]:6.4f}']
> for col in range(10):
>       temp.append(f',{AExt[k, col]:9.7f}')
> 
> tempStr = ''.join(tempStr)
> 
> Repeated concatenation of immutable strings (which is what Python has)
> is O(N**2) in the number of chunks added because of the need to
> repeatedly copy the string.


A more pythonic approach might be to eschew the "k is a row index" and 
resultant range(), by gathering the temperature readings into a 
list/tuple (tuple unpacking at read-step or zip(), as appropriate). The 
point of which (hah!) is to get rid of "pointers", and replace the 
'algebra' with more readable code.

The collection can then be processed into the string using .append() 
and/or .join(), perhaps with a list comprehension/generator...


-- 
Regards =dn