Maarten wrote:
So maybe a bit bold for a newbie to start posting a correction but i wanted the code to work:

Kent Johnson wrote:
<snip>

columns = [1,3,4]  # Column numbers to show, 0-based

f = open('mydata.txt')
for line in f:
data = line.split() # Assuming your data is tab- or space-delimited
data = [ item for i, item in data if i in columns ] # Filter out unwanted columns
print data # Output one row of text - put your formatting here

guess Kent forgot one line after:

    data = line.split()

adding next line after it:

    data = enumerate(data)

makes it work for me.

Ah, right you are. I should know better than to post code without trying it! Actually I meant to write data = [ item for i, item in enumerate(data) if i in columns ] which is just a more compact way of saying the same thing.

Still got a question. This notation/syntax of the list:

[ item for i, item in data if i in columns ]

is quite new for me. Can someone point me to more examples of this use Or give me the name of it (it must have a name) so i can google it?

It's called a 'list comprehension'. It is a handy shortcut for a loop that builds a list from another list. You can read more about them here:
http://docs.python.org/tut/node7.html#SECTION007140000000000000000


The line
  data = [ item for i, item in enumerate(data) if i in columns ]

is equivalent to
temp = []
for i, item in enumerate(data):
  if i in columns:
    temp.append(item)
data = temp

List comprehensions are generally more concise, easier to read (once you understand the syntax) and faster running than the equivalent spelled-out loop.

Kent
_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to