Concatenate string list to number list to form title - Logic needed.
Jussi Piitulainen
jpiitula at ling.helsinki.fi
Mon Dec 16 13:13:18 EST 2013
Ravi Prabakaran writes:
> I'm completely new to python. I just need simple logic to get output
> without any loops.
> I have list of string and list of list of numbers.
> Each string should be concatenated with every third and fourth
> values to generate proper titles in list of strings.
>
> t = ['Start','End']
> a = [[1,2,3,4],
> [5,6,7,8]]
>
>
> Expected Result : ( list of strings )
>
> ['Start - 3 , End - 4',
> 'Start - 7 , End - 8']
>
> Note : First 2 values from each list should be ignored.
>
>
> Could anyone please guide me with best solution without loops ?
That's a strange requirement - to have repetition without loops, in
Python, and still have a best solution.
I suppose it's fine to have a (built-in) function do the looping for
you so that there is no explicit loop in your own code. The .format
method of Python strings can do each individual string:
list(map('{2} - {0} , {3} - {1}'
.format('{0[2]}', '{0[3]}', *t)
.format, a))
The first (inner) call of .format builds the actual format string
whose .format method then builds each output string: {0[2]} in a
format string refers to the argument position 0 and its element
position 2; *t spreads the two elements of t as further positional
arguments.
If you have any background in functional programming with lists, map
should be fine and familiar. I would probably build and name the
format string outside the actual call as follows (untested).
start, end = t
format = ( '{2} - {0} , {3} - {1}'
.format('{0[2]}', '{0[3]}', start, end)
.format )
list(map(format, a))
All other things that come to mind would either be too much like loops
or they couldn't possibly be a best solution.
Incidentally, if you want a one-liner and tolerate long lines, the
first form I gave is perfectly good for that purpose.
I think *t and str.format require version 3 of Python.
More information about the Python-list
mailing list