Hi,
I keep working around a little problem with unpacking in cases in which I don't know how many elements I get. Consider this:
def tabulate_lists (*arbitray_number_of_lists):
table = zip (arbitray_number_of_lists)
for record in table:
# etc ...
This does not work, because the zip function also has an *arg parameter, which expects an arbitrary length enumeration of arguments
which it would turn into a tuple (lists in this case). Now my function does exactly the same thing ahead of zip. So, before I pass
the tuple "arbitrary_number_of_lists" to zip, I 'd need to unpack it but the only way I know of is into variables:
list1, list2, list3 = arbitrary_number_of_lists
zip (list1, list2, list3)
With arbitrary number of lists it cannot be done this way.
Question: Is there an unpacking mechanism for cases in which I don't know--and don't need to know--how many elements I get, or an
argument passing mechanism that is the inverse of the tuplifier (*args)?
table = zip (&arbitrary_number_of_lists) # I invent '&' to illustrate
I preclude passing a pre-zipped table as a solution, because all function-related argument processing should be done by the
function, not by the caller. Supposing my tabulator should auto-format a printout. It would need to analyze each column (e.g.
maxima, minima, max length of strings, etc.) That would be a lot simpler with column lists than with record lists, unless I undo
what the caller had to do, because the function couldn't ... a lot of in and out ...
Of course I could code a code edit and exec () it.
names_of_lists = ','.join (['list%d' % n for n in range (len (arbitrary_number_of_lists)])
exec ('"%s = arbitrary_number_of_lists"'% names_of_lists)
exec ('"table = zip (%s)"' % names_of_lists)
That should work, but it looks loathsome to me.
Has anyone come across a similar problem and found an elegant solution he might want to share?
Frederic 4 1864
I keep working around a little problem with unpacking in cases in which I don't know how many elements I get. Consider this:
>
def tabulate_lists (*arbitray_number_of_lists):
table = zip (arbitray_number_of_lists)
for record in table:
# etc ...
This does not work, because the zip function also has an *arg parameter, which expects an arbitrary length enumeration of arguments
which it would turn into a tuple (lists in this case). Now my function does exactly the same thing ahead of zip. So, before I pass
the tuple "arbitrary_number_of_lists" to zip, I 'd need to unpack it but the only way I know of is into variables:
list1, list2, list3 = arbitrary_number_of_lists
zip (list1, list2, list3)
I don't get your problem here. This works for me:
args = [range(5) for i in xrange(5)]
print zip(*args)
With arbitrary number of lists it cannot be done this way.
Question: Is there an unpacking mechanism for cases in which I don't know--and don't need to know--how many elements I get, or an
argument passing mechanism that is the inverse of the tuplifier (*args)?
No.
It looks a little bit as if you aren't aware of the symetry behind the *
and **-argument-passing schemes. I suggest reading up on them.
Diez
>Question: Is there an unpacking mechanism for cases in which I don't
>know--and don't need to know--how many elements I get, or an argument passing mechanism that is the inverse of the tuplifier (*args)?
No.
It looks a little bit as if you aren't aware of the symetry behind the *
and **-argument-passing schemes. I suggest reading up on them.
Sorry - I was somewhat unconcentrated and missed the last part of the
sentence. So it is
No "generalized", yes, the inverse of *args is foo(*args)
Sorry for the confusion.
Diez
Anthra Norell wrote:
Hi,
I keep working around a little problem with unpacking in cases in which I don't know how many elements I get. Consider this:
def tabulate_lists (*arbitray_number_of_lists):
table = zip (arbitray_number_of_lists)
for record in table:
# etc ...
This does not work, because the zip function also has an *arg parameter, which expects an arbitrary length enumeration of arguments
maybe I don't understand the problem properly, but you can use '*args'
as 'args' or as '*args', if you see what I mean!, ie.
def tabulate_lists (*arbitray_number_of_lists):
table = zip (*arbitray_number_of_lists)
for record in table:
# etc ...
for example:
def sum_columns(*rows):
for col in zip(*rows):
yield sum(col)
for i, s in enumerate( sum_columns( [1,2], [3,2], [5,1] ) ):
print 'Column %s: SUM=%s' % (i,s)
Column 0: SUM=9
Column 1: SUM=5
-----------------------------------------------------
alternatively:
import itertools as it
def sum_columns2( iterable ):
for col in it.izip( *iterable ):
yield sum(col)
def iter_rows():
yield [1,2]
yield [3,2]
yield [5,1]
print list( sum_columns2( iter_rows() ) )
#(izip isn't necessary here, zip would do.)
-----------------------------------
Gerard
I get it!
>>def f (*a):
print a
print zip (a) # My mistake
print zip (*a) # Gerard's solution.
>>f (l1, l2, l3)
([1, 2, 3], [4, 5, 6], [7, 5, 34]) # Argument: tuple of lists
[([1, 2, 3],), ([4, 5, 6],), ([7, 5, 34],)] # My mistake
[(1, 4, 7), (2, 5, 5), (3, 6, 34)] # That's what I want
Thank you all
Frederic
----- Original Message -----
From: "Gerard Flanagan" <gr********@yahoo.co.uk>
Newsgroups: comp.lang.python
To: <py*********@python.org>
Sent: Sunday, August 27, 2006 2:59 PM
Subject: Re: unpaking sequences of unknown length
>
Anthra Norell wrote:
Hi,
I keep working around a little problem with unpacking in cases in which I don't know how many elements I get. Consider this:
def tabulate_lists (*arbitray_number_of_lists):
table = zip (arbitray_number_of_lists)
for record in table:
# etc ...
This does not work, because the zip function also has an *arg parameter, which expects an arbitrary length enumeration of
arguments
>
maybe I don't understand the problem properly, but you can use '*args'
as 'args' or as '*args', if you see what I mean!, ie.
def tabulate_lists (*arbitray_number_of_lists):
table = zip (*arbitray_number_of_lists)
for record in table:
# etc ...
for example:
def sum_columns(*rows):
for col in zip(*rows):
yield sum(col)
for i, s in enumerate( sum_columns( [1,2], [3,2], [5,1] ) ):
print 'Column %s: SUM=%s' % (i,s)
Column 0: SUM=9
Column 1: SUM=5
-----------------------------------------------------
alternatively:
import itertools as it
def sum_columns2( iterable ):
for col in it.izip( *iterable ):
yield sum(col)
def iter_rows():
yield [1,2]
yield [3,2]
yield [5,1]
print list( sum_columns2( iter_rows() ) )
#(izip isn't necessary here, zip would do.)
-----------------------------------
Gerard
-- http://mail.python.org/mailman/listinfo/python-list This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Thomas Philips |
last post by:
I have been playing around with reading strings with embedded escape
sequences from files both using readline() and codecs.open() and have
a question.I create a file "test.txt" with exactly one...
|
by: Minho Chae |
last post by:
Hello, python lovers!!
I'm trying to create combinations of sequences.
For example, if the sequence is 'acgt' and the length is 8,
then I would like to have 4^8 results such as
'aaaaaaaa',...
|
by: harrelson |
last post by:
I have a list of about 2500 html escape sequences (decimal) that I need
to convert to utf-8. Stuff like:
비
행
기
로
보
낼
거
|
by: temp |
last post by:
Hi All,
I wonder could someone help me with this?
What I want to do is search through a list of letters and look for
adjacent groups of letters that form sequences, not in the usual way of...
|
by: Navin |
last post by:
Ado Sort -Relate, Compute By, or Sort operations cannot be done on
column(s) whose key length is unknown or exceeds 10 KB.
hi,
guys
i have asp application running on iis 5.0 windows 2000
i use...
|
by: TomServo |
last post by:
I am writing code that needs to run on a variety of Unix systems. I am
calling the statvfs and statfs system calls and I need to to convert some of
the integers returned to character strings....
|
by: SoFaraway |
last post by:
Hi all,
In C, to read a line from a file, we need to allocate some fixed length of memory first. However, if the line is longer than the length of the allocated memory, it can't be read correctly....
|
by: Himanshu Chauhan |
last post by:
Hi!
I was wondering, In the first parse of a singly linked list of unknown
length, is it possible to know when we are at middle of the linked list?
Regards
--Himanshu
|
by: carles |
last post by:
Hi,
Here, sample code where a byte array is used to fill a particular structure:
fs = File.OpenRead(path); // FileStream
BITMAPFILEHEADER bfh = new BITMAPFILEHEADER();
b = new byte;
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
| |