473,704 Members | 3,112 Online

# FLexible formatted text involving nested lists?

I'm having trouble getting my head around a solution for a situation
where I need to flexibly format some text with a varying number of
embedded fields.

Here's a simplified description of my challenge...

I have a list of lists called bigList:

bigList = [ little, small, tiny]

The sub-lists have varying sizes. I won't know how many items they have
but it will be between 0 and 3

So perhaps little = [3, 2, 7]
small = [6,4]
tiny = [2]

The values in those sub lists correspond to formatted print strings. The
formatting strings will change over time and they are in a list called
"fmts" where

fmts = [fmtA, fmtB, fmtC] where

fmtA = 'oats %0d kilos over %0d days with %0d workers'
fmtB = 'barley %0d lbs for %0d hours'

If I knew how many fields were in each 'sub-list' in bigList ahead of
time, and it never changed I could awkwardly do this:

print fmtA %(little[0], little[1], little[2])
print fmtB %(small[0], small[1])
print fmtC %(tiny[0])

or equivalently,

print fmts[0] %(bigList[0][0], bigList[0][1], bigList[0][2])
print fmts[1] %(bigList[1][0], bigList[1][1])
print fmts[2] %(bigList[2][0])

Both approaches would yield:
oats 3 kilos over 2 days with 7 workers
barley 6 lbs for 4 hours
Now my challenge: since the number of fields is unknown at design time,
my app needs to add be able to flexibly handle this.

I though maybe I could use a loop that figures things out as it goes
along. e.g...

i=0
for fmtString in fmts
numbOfFields = len(fmt[i])
print fmtString %(bigList[i][ need "for 0 to numbOffields" worth of
indices!] )

But I don't know how to have a number of items in the print expression
that align to the numbOfFields value!? Is there some other approach I
can use?

I thought perhaps it would accomodate extra elements in the %(...) part
of the formatted print expression which would be ignored, but that
doesn't work.

Maybe I have to break my fmts up and do a field at a time? Any thoughts
are appreciated :)

-Ross.
Oct 9 '08 #1
4 1129
Ross,

I'm no expert in python, so excuse me if this is inane.

What I would do is have fmts be a dictionary where
fmts = { 3 = 'oats %0d kilos over %0d days with %0d workers',
2 = 'barley %0d lbs for %0d hours',

then something like
for x in bigList:
print fmts[len(x)] % x

I didn't test this, but in theory it should work.

Hope this helps,
Kerri

On Thu, Oct 9, 2008 at 2:36 PM, RossRGK <no****@nospam. nowaywrote:
I'm having trouble getting my head around a solution for a situation where I
need to flexibly format some text with a varying number of embedded fields.

Here's a simplified description of my challenge...

I have a list of lists called bigList:

bigList = [ little, small, tiny]

The sub-lists have varying sizes. I won't know how many items they have but
it will be between 0 and 3

So perhaps little = [3, 2, 7]
small = [6,4]
tiny = [2]

The values in those sub lists correspond to formatted print strings. The
formatting strings will change over time and they are in a list called
"fmts" where

fmts = [fmtA, fmtB, fmtC] where

fmtA = 'oats %0d kilos over %0d days with %0d workers'
fmtB = 'barley %0d lbs for %0d hours'

If I knew how many fields were in each 'sub-list' in bigList ahead of time,
and it never changed I could awkwardly do this:

print fmtA %(little[0], little[1], little[2])
print fmtB %(small[0], small[1])
print fmtC %(tiny[0])

or equivalently,

print fmts[0] %(bigList[0][0], bigList[0][1], bigList[0][2])
print fmts[1] %(bigList[1][0], bigList[1][1])
print fmts[2] %(bigList[2][0])

Both approaches would yield:
oats 3 kilos over 2 days with 7 workers
barley 6 lbs for 4 hours
Now my challenge: since the number of fields is unknown at design time, my
app needs to add be able to flexibly handle this.

I though maybe I could use a loop that figures things out as it goes along.
e.g...

i=0
for fmtString in fmts
numbOfFields = len(fmt[i])
print fmtString %(bigList[i][ need "for 0 to numbOffields" worth of
indices!] )

But I don't know how to have a number of items in the print expression that
align to the numbOfFields value!? Is there some other approach I can use?

I thought perhaps it would accomodate extra elements in the %(...) part of
the formatted print expression which would be ignored, but that doesn't
work.

Maybe I have to break my fmts up and do a field at a time? Any thoughts are
appreciated :)

-Ross.
--
http://mail.python.org/mailman/listinfo/python-list

--
Yuma Educational Computer Consortium
Compass Development Team
Kerri Reno
kr***@yumaed.or g (928) 502-4240
..·:*¨¨*:·. .·:*¨¨*:·. .·:*¨¨*:·.
Oct 9 '08 #2
On Oct 10, 4:36*am, RossRGK <nob...@nospam. nowaywrote:
I'm having trouble getting my head around a solution for a situation
where I need to flexibly format some text with a varying number of
embedded fields.

Here's a simplified description of my challenge...

I have a list of lists called bigList:

bigList = [ little, small, tiny]

The sub-lists have varying sizes. *I won't know how many items they have
but it will be between 0 and 3

So perhaps little = [3, 2, 7]
small = [6,4]
tiny = [2]

The values in those sub lists correspond to formatted print strings. The
formatting strings will change over time and they are in a list called
"fmts" where

fmts = [fmtA, fmtB, fmtC] * where

fmtA = 'oats %0d kilos over %0d days with %0d workers'
fmtB = 'barley %0d lbs for %0d hours'

If I knew how many fields were in each 'sub-list' in bigList ahead of
time, and it never changed I could awkwardly do this:

print fmtA %(little[0], little[1], little[2])
print fmtB %(small[0], small[1])
print fmtC %(tiny[0])

or equivalently,

print fmts[0] %(bigList[0][0], bigList[0][1], bigList[0][2])
print fmts[1] %(bigList[1][0], bigList[1][1])
print fmts[2] %(bigList[2][0])

Both approaches would yield:
oats 3 kilos over 2 days with 7 workers
barley 6 lbs for 4 hours

Now my challenge: since the number of fields is unknown at design time,
my app needs to add be able to flexibly handle this.

I though maybe I could use a loop that figures things out as it goes
along. e.g...

i=0
for fmtString in fmts
* *numbOfFields = len(fmt[i])
* *print fmtString %(bigList[i][ need "for 0 to numbOffields" worth of
indices!] )

But I don't know how to have a number of items in the print expression
that align to the numbOfFields value!? *Is there some other approach I
can use?

I thought perhaps it would accomodate extra elements in the %(...) part
of the formatted print expression which would be ignored, but that
doesn't work.

Maybe I have to break my fmts up and do a field at a time? *Any thoughts
are appreciated * :)

-Ross.
The tuple() type-conversion function will do what you need:

print fmts[0] % tuple(bigList[0])
print fmts[1] % tuple(bigList[1])
print fmts[2] % tuple(bigList[2])

Oct 10 '08 #3
Kerri Reno wrote:
Ross,

I'm no expert in python, so excuse me if this is inane.

What I would do is have fmts be a dictionary where
fmts = { 3 = 'oats %0d kilos over %0d days with %0d workers',
2 = 'barley %0d lbs for %0d hours',

then something like
for x in bigList:
print fmts[len(x)] % x

I didn't test this, but in theory it should work.

Hope this helps,
Kerri

Thx for the suggestion - i think that would match the number of fields
to the number of parameters in the specific example but not the general
case. ie fmts[3] could have 3fields this time, but might be 2 another
time or something else.

Plus I don't think print will accept a list 'x' in the %x part of it.
Oct 10 '08 #4
davidsands wrote:
>
The tuple() type-conversion function will do what you need:

print fmts[0] % tuple(bigList[0])
print fmts[1] % tuple(bigList[1])
print fmts[2] % tuple(bigList[2])
I never thought of the tuple type conversion - that looks promising.
Thanks for that!

R.
Oct 10 '08 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

### Similar topics

 25 12699 by: chad | last post by: I am writing a program to do some reliability calculations that require several nested for-loops. However, I believe that as the models become more complex, the number of required for-loops will increase. Does Python have a limit on the number of nested for-loops? Thanks. 15 2663 by: Xah Lee | last post by: Here's the belated Java solution. import java.util.List; import java.util.ArrayList; import java.lang.Math; class math { public static List range(double n) { return range(1,n,1); } 2 3102 by: GriffithsJ | last post by: Hi I have been given some text that needs to be displayed on a web page. The text is pre-formatted (includes things like lists etc) and displays okay if I wrap it using the
tag.  However, the font used is rather "naff" and  looks too different to the rest of my web page.    I'm not sure how I can (or even whether I can) override the font used with  the
tag.  If not, is there another tag I can use to display  pre-formatted...
4 				    			8421                    			by: Fabian | 			last post   by:   			 			I have a three tier nested array, used to define a map for a javascript  game, and can be edited within the web page. Is there a way I can  generate a visible copy of this array that I can then c&p into a file? I  think the best solution would be to write into a popup window (this  popup would be purely for map development use, so I don't feel worried  by popup blockers, as only myself would be seeing the popup). However, I  have no idea how to:...
7 				    			4423                    			by: Jane Withnolastname | 			last post   by:   			 			I have a number of unordered lists nested within ULs nested within ULs  nested within ULs. I have set the style for LI to be .7em.  Mozilla gives me the layout as I imagined it, with the lists indented  and all at .7em.  MSIE, however, shows the indented lists, but the font gets smaller and  smaller as the lists nest deeper and deeper. Presumably, it is  inheriting the properties of the list it is nested in, thereby giving  me 70% of the...

4 				    			7132                    			by: Lee K. Seitz | 			last post   by:   			 			I'm still relatively new to stylesheets.  I'm trying to do something  that seemed fairly simple on the surface, but is proving to be a  challenge.  I have a set of nested lists:
• Side One
• Pac-Man Fever
• Froggy's Lament
• Ode to a Centipede 2 10321 by: Christopher Benson-Manica | last post by: Is the following program conforming under C99? #include typedef struct foo { int bar; int baz; } foo; foo foos={ 7 2470 by: pkirk25 | last post by: My data is in a big file that I have no control over. Sometimes its over 30 MB and often there are several of them. It is machine generated and is nicely formatted. Example text follows: AuctioneerSnapshotDB = { = { = 20, = 1, = { 7 3643 by: patrick j | last post by: Hi I'm wondering about lists with nested lists as one does on a Saturday afternoon. Anyway below is an example of a list with a nested list which the iCab browser's very useful HTML verification ability will not like: