How to implement function like this?

Y

Yinghe Chen

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,
 
M

Marc 'BlackJack' Rintsch

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
 
P

Paul Rubin

Yinghe Chen said:
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))
 
L

Loic Mahe

even shorter:

def funcA(tarray):
s = min(len(tarray), 3)
return [2, 3, 4][0:s] + [e for e in funcB(3-s)[0:3-s]]
 
M

Marc 'BlackJack' Rintsch

even shorter:

def funcA(tarray):
s = min(len(tarray), 3)
return [2, 3, 4][0:s] + [e for e in funcB(3-s)[0:3-s]]

Why the list comprehension!?

Ciao,
Marc 'Blackjack' Rintsch
 
L

Loic Mahe

Marc 'BlackJack' Rintsch a écrit :
even shorter:

def funcA(tarray):
s = min(len(tarray), 3)
return [2, 3, 4][0:s] + [e for e in funcB(3-s)[0:3-s]]

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(3-s)[0:3-s]

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top