Re: Concatenate string list to number list to form title - Logic needed.

2013-12-16 Thread Chris Angelico
On Tue, Dec 17, 2013 at 4:16 AM, Ravi Prabakaran ravi@gmail.com 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


Re: Concatenate string list to number list to form title - Logic needed.

2013-12-16 Thread Mark Lawrence

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.

2013-12-16 Thread Chris Angelico
On Tue, Dec 17, 2013 at 4:41 AM, Ravi Prabakaran ravi@gmail.com 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.

2013-12-16 Thread Chris Angelico
On Tue, Dec 17, 2013 at 4:51 AM, Chris Angelico ros...@gmail.com 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.

2013-12-16 Thread Jussi Piitulainen
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.

2013-12-16 Thread Peter Otten
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.

2013-12-16 Thread John Gordon
In 2333bfb4-cd72-4ed0-9b28-d8dbe26b5...@googlegroups.com Ravi Prabakaran 
ravi@gmail.com 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.

2013-12-16 Thread Terry Reedy

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