The reason for the apparently redundant extra mention of the variable x
when writing x for x
is that the first x
does not need to be x
. It just happens to be in the examples you give. Here are a few more examples which should clarify the difference between the first and second x
in your question:
ones = [1 for x in range(10)]
This simply gives a list of 10 ones, the same as [1] * 10
.
squares = [x*x for x in range(10)]
This gives x
squared for each x
in the specified range.
In your example, the second x
is the variable used by the for loop, and the first x
is simply an expression, which happens in your case to be just x
. The expression can be whatever you like, and does not need to be in terms of x
.
results = [expression for x in range(10)]
expression
can include anything you like – a string, a calculation, a function – whatever you choose. If the expression happens to be just x
then it looks unusual if you are not used to it, but it’s the same as the following:
results = [] for x in range(10): results.append(expression)