@peterwoodbridge: Nicht „indexieren” sondern „iterieren”. Indexieren bedeutet den Indexoperator (``[…]``) anzuwenden also zum Beispiel ``sequence[42]`` und iterieren kommt von
Iteration, also schrittweise etwas abarbeiten, zum beispielsweise in Schleifen und insbesondere in ``for``-Schleifen.
Im Grunde iterierst Du schon direkt über eine Sequenz, nämlich die Liste von Zahlen die von der `range()`-Funktion zurück gegeben wird. Und die benutzt Du dann als Index für `x`. Vielleicht wird es durch ein paar Beispiele in einer Python-Shell deutlicher:
Code: Alles auswählen
In [10]: values = [3, 5, 7]
In [11]: range(len(values))
Out[11]: [0, 1, 2]
In [12]: for i in range(len(values)):
....: print i
....:
0
1
2
In [13]: for i in range(len(values)):
....: print values[i]
....:
3
5
7
In [14]: for value in values:
....: print value
....:
3
5
7
In [15]: for i, value in enumerate(values):
....: print i, value
....:
0 3
1 5
2 7
Wie ich das gemacht hätte käme auf die Aufgabenstellung an. Ob man den Inhalt einer vorhandenen Liste verändern soll, oder eine neue Liste mit veränderten Werten liefern soll. Im ersten Fall hätte ich das im Grunde so gemacht wie Du, allerdings ohne das ``return`` am Ende. Und mit besseren Namen und `xrange()` statt `range()`.
Im anderen Fall muss man in der Funktion eine neue Liste erstellen und die mit den verdoppelten Werten füllen. Entweder in dem man eine leere Liste erstellt und die Werte mit der `append()`-Methode anfügt, oder mit einer speziellen Syntax um Listen zu erstellen, der sogenannten „list comprehension”.
Code: Alles auswählen
def values_doubled(values):
for i in xrange(len(values)):
values[i] *= 2
# a *= b <=> a = a * b (gilt in der Regel)
def double_values_a(values):
result = list()
for value in values:
result.append(value * 2)
return result
def double_values_b(values):
return [value * 2 for value in values] # <- List comprehension.
Edit: Verdammt ich war zu langsam.