Hello gurus,
I have a question, a function like below, it is implemented by me, :)
def funcA(tarray):
a = [2,3,4]
if len(tarray) >=3:
return a[0],a[1], a[2]
elif len(tarray) == 2:
return a[0],a[1], funcB(1)[0]
elif len(tarray) == 1:
return a[0], funcB(2)[0], funcB(2)[1]
else:
return funcB(3)[0], funcB(3)[1], funcB(3)[2]
The return of funcA is always 3 values, but depending on the length of
tarray, I need to return different values accordingly. if tarray lenght is
2, I need to get another one value from funcB, if tarray length is 0, I need
to get all three values from funcB.
Is there a brief way to achieve it?
Thanks, 5 1156
On Tue, 23 Oct 2007 16:28:37 +0800, Yinghe Chen wrote:
Hello gurus,
I have a question, a function like below, it is implemented by me, :)
def funcA(tarray):
a = [2,3,4]
if len(tarray) >=3:
return a[0],a[1], a[2]
elif len(tarray) == 2:
return a[0],a[1], funcB(1)[0]
elif len(tarray) == 1:
return a[0], funcB(2)[0], funcB(2)[1]
else:
return funcB(3)[0], funcB(3)[1], funcB(3)[2]
The return of funcA is always 3 values, but depending on the length of
tarray, I need to return different values accordingly. if tarray lenght is
2, I need to get another one value from funcB, if tarray length is 0, I need
to get all three values from funcB.
Untested:
def func_a(t_array):
result = [2, 3, 4]
t_array_length = len(t_array)
remaining_length = len(result)  t_array_length
if t_array_length < len(result):
result = (result[:t_array_length]
+ func_b(remaining_length)[:remaining_length])
return tuple(result)
Ciao,
Marc 'BlackJack' Rintsch
"Yinghe Chen" <yi*********@jeppesen.com.rmwrites:
def funcA(tarray):
a = [2,3,4]
if len(tarray) >=3:
return a[0],a[1], a[2]
elif len(tarray) == 2:
return a[0],a[1], funcB(1)[0]
elif len(tarray) == 1:
return a[0], funcB(2)[0], funcB(2)[1]
else:
return funcB(3)[0], funcB(3)[1], funcB(3)[2]
untested:
from itertools import chain, islice
def funcA(tarray):
xB = max(3  len(tarray), 0)
return chain(a, islice(funcB(xB), xB))
even shorter:
def funcA(tarray):
s = min(len(tarray), 3)
return [2, 3, 4][0:s] + [e for e in funcB(3s)[0:3s]]
On Tue, 23 Oct 2007 11:48:08 +0200, Loic Mahe wrote:
even shorter:
def funcA(tarray):
s = min(len(tarray), 3)
return [2, 3, 4][0:s] + [e for e in funcB(3s)[0:3s]]
Why the list comprehension!?
Ciao,
Marc 'Blackjack' Rintsch
Marc 'BlackJack' Rintsch a Ã©crit :
On Tue, 23 Oct 2007 11:48:08 +0200, Loic Mahe wrote:
>even shorter:
def funcA(tarray): s = min(len(tarray), 3) return [2, 3, 4][0:s] + [e for e in funcB(3s)[0:3s]]
Why the list comprehension!?
Ciao,
Marc 'Blackjack' Rintsch
sorry I just read too fast
and thought he worked with lists ...
anyway 'e for e in' and so list comprehension was useless here
def funcA(tarray):
s = min(len(tarray), 3)
return (2, 3, 4,)[0:s] + funcB(3s)[0:3s]
this is ok if funcB(...) returns a tuple ...
if it returns a list just add: tuple(funcB(...))
note: list comprehension transforms a tuple into a list This discussion thread is closed Replies have been disabled for this discussion. Similar topics
26 posts
views
Thread by Oplec 
last post: by

6 posts
views
Thread by Charles Law 
last post: by

1 post
views
Thread by wukexin 
last post: by

7 posts
views
Thread by Don 
last post: by

4 posts
views
Thread by GrandpaB 
last post: by

5 posts
views
Thread by Stacey Levine 
last post: by

3 posts
views
Thread by alex 
last post: by

reply
views
Thread by emin.shopper 
last post: by

19 posts
views
Thread by UG 
last post: by
           