state = [st for s in state for st in states[(s,letter)]]
can be read as new_state = []
for s in state:
for st in states[(s, letter)]:
new_state.append(st)
state = new_state state = [st for s in state for st in states[(s,letter)]]
can be read as new_state = []
for s in state:
for st in states[(s, letter)]:
new_state.append(st)
state = new_state something = [ x for loop ]
Means something = []
for loop:
something.append[ x ]
so I'll use x for the current element of the resulting list (I'll rename st to x).Second, the 'letter' is not relevant for analysis, I'll assume a constant.
Third, there are variables 'state' and 'states' so naming again can confusingly suggest that there is some deep connection between them. I'll rename 'states' to 'moves'. So instead of:
state = [st for s in state for st in states[(s,letter)]]
I'll start from: state = [x for s in state for x in moves[s]]
Now to show exactly what's going on, I'll rewrite it to print partial results: state=[0,1,2]
moves=[[11,12],[21,22],[31,32]]
t = []
for s in state:
a = moves[ s ]
print "s, a:",s, a
for x in a:
print "x:", x
t.append( x )
print t
state = t
The output is: s, a: 0 [11, 12]
x: 11
x: 12
s, a: 1 [21, 22]
x: 21
x: 22
s, a: 2 [31, 32]
x: 31
x: 32
[11, 12, 21, 22, 31, 32]Turns out that nesting is a feature:
http://www.python.org/dev/peps/pep-0202/
- The form [... for x... for y...] nests, with the last index varying fastest, just like nested for loops.
st {for s in state} {for st in states[(s,letter)]}
But I agree, reading it as English your grouping makes more sense.