473,378 Members | 1,492 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,378 software developers and data experts.

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'
fmtC = 'apples %0d baskets'

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
apples 2 baskets
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 1113
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',
1 = 'apples %0d baskets'}

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'
fmtC = 'apples %0d baskets'

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
apples 2 baskets
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.org (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'
fmtC = 'apples %0d baskets'

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
apples 2 baskets

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',
1 = 'apples %0d baskets'}

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
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...
15
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
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 <pre/> tag. ...
4
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...
7
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...
4
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: <ul> <li>Side...
2
by: Christopher Benson-Manica | last post by:
Is the following program conforming under C99? #include <stdio.h> typedef struct foo { int bar; int baz; } foo; foo foos={
7
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: ...
7
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...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.