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


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 
 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 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 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 Chris Angelico
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.

2013-12-16 Thread Chris Angelico
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.

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: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.

2013-12-16 Thread Ravi Prabakaran
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