[Tutor] Would somebody kindly...
Cameron Simpson
cs at zip.com.au
Wed Oct 29 07:58:51 CET 2014
On 28Oct2014 21:33, Clayton Kirkwood <crk at godblessthe.us> wrote:
>!From: Cameron Simpson [mailto:cs at zip.com.au]
>!Let me try a less wordy diagram. You will need to be displaying in a
>!constant width font :-)
>!
>! [ pair for pair in values if key == pair[0] ]
>! ^^^^-- the expression that accrues in the resulting list
>! ^^^^-- the loop variable, taken from the loop source values
>! ^^^^^^-- the loop source values
>! ^^^^^^^^^^^^^^-- condition for including the
>! expression in the resulting list
>!
>!So that first "pair" could be any expression, it is almost only
>!coincidence that it is the same as the loop variable. It is the same in
>!this case because this is the idiomatic way to select particular values
>!form an existing list.
>!
>!If we'd wanted the new list to contain double the original values we'd
>!write:
>!
>! [ pair*2 for pair in values if key == pair[0] ]
>
>Ok, I am somewhat confused again. In the original example up above, it
>appears that the pair list or tuple gets overridden. In this one right
>above, once again, the list gets overwritten again, but what is being
>doubled?, each part of the tuple?
First up, this makes a list, not a tuple. (Hence the outermost [] instead of
(). No, there is not a tuple equivalenti:-)
So, to get things straight:
- values is a list of pairs (2-tuples)
- the list comprehension above creates a new list consisting the first
expression computed for each pair in "values" matching the condition
expression
And I had not noticed that "pair" was a 2-tuple. So "pair*2" is not a sensible
example. The point is that the first "pair" (or bad example "2*pair") is an
arbitrary expression, used to compute each value in the new list.
Cheers,
Cameron Simpson <cs at zip.com.au>
Don't have awk? Use this simple sh emulation:
#!/bin/sh
echo 'Awk bailing out!' >&2
exit 2
- Tom Horsley <tahorsley at csd.harris.com>
More information about the Tutor
mailing list