Quote:What I don't understand is how, in the list comprehension, Python knows to make (x, y) into a list of tuples.
The tuples are made inside the list comprehension explicit.
The container is around the tuples is the list.
The creation of tuples happens often implicit.
def foo(): return 42, 1337If you call this function, it will return (42, 1337).
You can write it more explicit:
def foo(): return (42, 1337)A for-loop and the assignment operator (=) are doing assignment.
If the returned result is an iterable (tuple, list, something else), you can do argument unpacking:
first, second = foo()This is useful for enumeration for example.
colors = ['green', 'blue', 'red'] for iterable enumerate(colors): print(iterable)This will return (0, 'green') (1, 'blue') (2, 'red').
Now with argument unpacking on the left side:
for index, color enumerate(colors): print(index, color)You have to pay attention, you need on the left side exactly the same amout of variables, as each iteration returns elements.
To less or to much variables will lead into a ValueError.
Since Python 3.5 this was optimized, we can now consume on the left side all elements, which are too much:
first, *middle, last = range(100) # <- will iterate over range, # because on the left side argument unpacking happens # first get one element # *middle the rest - the last element # last get's the last element first, *last = range(100) *start, last = range(100)Another helpful trick is nested argument unpacking.
For example you have some iterable, which yields 2 elements for each iteration.
Then you want to count the index of it with enumerate.
def gen_2(): """Generator to produce expected data""" for i in range(5): yield (i, i*2) generator = gen_2() for n, (element1, element2) in enumerate(generator): print(n, element1, element2)More explicit:
generator = gen_2() for (n, (element1, element2)) in enumerate(generator): print(n, element1, element2)This works also with the assignment operator:
a, (b, c) = [1, [2, 3]]
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
All humans together. We don't need politicians!