[Tutor] Would somebody kindly...
Dave Angel
davea at davea.name
Thu Oct 30 08:38:45 CET 2014
"Martin A. Brown" <martin at linux-ip.net> Wrote in message:
>
> Hi there Clayton,
>
>> values = [ ('a', 1), ('b', 2), ('a', 5), ('c', 7)]
>> key = 'a'
>> pair=[] # -- this assignment is unnecessary
>> x=[pair for pair in values if key == pair[0]]
>> print(x)
>>
>> I get [('a', 1), ('a', 5)]
>
> I also get that result. Good.
>
>> So, what does that first pair do? I see and have used the first comprehension.
>
> I'll point out that somebody (Cameron Simpson, specifically) already
> gave you a hint that might have helped, but maybe you missed it as
> you were trying to understand list comprehensions.
>
> Let's play a little game....I'm going to assume that the variables
> values and key are initialized as you have initialized them above.
>
>
> Game #1: Recognize that the name of the variable in the list
> comprehension is ephemeral.
>
> >>> [frobnitz for frobnitz in values if key == frobnitz[0]]
> [('a', 1), ('a', 5)]
>
> Yes, I guess that's obvious now. So, this is why people often use
> 'x' in these situations.
>
> >>> [x for x in values if key == x[0]]
> [('a', 1), ('a', 5)]
>
> The variable will probably contain the final element of the input
> sequence after the list comprehension terminates.
NO, NO, NO. The OP is using Python 3.4, and has consistently
shown results accordingly. x does NOT exist after the list
comprehension. That was a flaw in python 2.x which has been
fixed.
--
DaveA
More information about the Tutor
mailing list