Re: Concatenate string list to number list to form title - Logic needed.
On 12/16/2013 12:43 PM, Mark Lawrence wrote: On 16/12/2013 17:16, Ravi Prabakaran wrote: Hi, I'm completely new to python. I just need simple logic to get output without any loops. I have list of string The remainder of your description and example imply that this must be a sequence of exactly two strings. In other words, 'list' is both too specific as to class and not specific enough as to length. >> and list of list of numbers. While this must be an iterable of sequences of exactly 4 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 ? If the length of the iterable of sequences is not fixed, a loop of some sort is needed. I've no idea what your definition of "best" is but this works. strings = ['{} - {} , {} - {}'.format(t[0], b[-2], t[1], b[-1]) for b in a] Very nice. The following use the format mini language to do the indexing, avoiding passing the args twice each. strings = ['{0[0]} - {1[2]} , {0[1]} - {1[3]}'.format(t, b) for b in a] form = '{src[0]} - {val[2]} , {src[1]} - {val[3]}' strings = [form.format(src=t, val=b) for b in a] The first should be faster, but may be less readable. Note that '-2' and '-1' do not work as int indexes in the field names because they would be interpreted as string keys rather than integers. -- Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
In <2333bfb4-cd72-4ed0-9b28-d8dbe26b5...@googlegroups.com> Ravi Prabakaran writes: > Hi, > 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 ? output_list = [] t = ['Start','End'] a = [[1,2,3,4], [5,6,7,8]] output_list.append('%s - %s, %s - %s' % (t[0], a[0][2], t[1], a[0][3])) output_list.append('%s - %s, %s - %s' % (t[0], a[1][2], t[1], a[1][3])) print output_list -- John Gordon Imagine what it must be like for a real medical doctor to gor...@panix.comwatch 'House', or a real serial killer to watch 'Dexter'. -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
Jussi Piitulainen wrote: > 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)) Don't do that if t may contain user data. For the sake of the argument let's assume that a[...][0:2] is confidential. Then >>> t = "{0[0]}", "{0[1]}" >>> list(map('{2} - {0} , {3} - {1}' ... .format('{0[2]}', '{0[3]}', *t) ... .format, a)) ['1 - 3 , 2 - 4', '5 - 7 , 6 - 8'] (I think doubling the braces is sufficient to fix this) > 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. -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
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. -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
On Tue, Dec 17, 2013 at 4:51 AM, Chris Angelico wrote: > t = ['Start','End'] > a = [[1,2,3,4], > [5,6,7,8]] > result = [] > for cur in a: > result.append("%s - %d"%(t[0],cur[2])) > result.append("%s - %d"%(t[1],cur[3])) Whoops, I misread the desired output, I thought you wanted a four-string list. It's two strings. That's actually easier, and Mark's solution is pretty much what I'd go for. ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
On Tue, Dec 17, 2013 at 4:41 AM, Ravi Prabakaran wrote: >> Hi Chris, > > Thanks for reply. If you have any good idea with loop, please post. But > i'm looking same without loop because python has slicing,concatenating and > other straight forward feature. I guess it can be done without loop. My > client does not prefer loops and expects simple and neat code to improve > performance. We are dealing with billion data. I'm going to hope that it was in error that you sent this off-list, or at least that you won't mind my replying on-list. Here's one way to do it: t = ['Start','End'] a = [[1,2,3,4], [5,6,7,8]] result = [] for cur in a: result.append("%s - %d"%(t[0],cur[2])) result.append("%s - %d"%(t[1],cur[3])) ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
On 16/12/2013 17:16, Ravi Prabakaran wrote: Hi, 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 ? Thanks Ravi I've no idea what your definition of "best" is but this works. strings = ['{} - {} , {} - {}'.format(t[0], b[-2], t[1], b[-1]) for b in a] -- My fellow Pythonistas, ask not what our language can do for you, ask what you can do for our language. Mark Lawrence -- https://mail.python.org/mailman/listinfo/python-list
Re: Concatenate string list to number list to form title - Logic needed.
On Tue, Dec 17, 2013 at 4:16 AM, Ravi Prabakaran wrote: > Could anyone please guide me with best solution without loops ? > Why "without loops"? The best solution, in my opinion, is a loop. Is this a specific challenge (homework)? I could make you a list comprehension, but that's really just another form of loop More information on the problem parameters, please? ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Concatenate string list to number list to form title - Logic needed.
Hi, 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 ? Thanks Ravi -- https://mail.python.org/mailman/listinfo/python-list