4

Python for ループのインデックスをどのように制御しますか? (または、できますか?またはする必要がありますか?)

例えば:

for i in range(10):
    print i
    i = i + 1

収量:

0
1
2
3
4
5
6
7
8
9

私はそれが得られるようにしたい:

0
2
3
4
5
6
7
8
9
10

私がこの質問から完全に脱線している場合、本当に申し訳ありません。現時点で私の脳は完全に失敗しており、解決策は明らかです。


なぜ私は尋ねているのですか?

これは質問とは関係ありませんが、答えが必要な理由に関連しています。

私が書いているPythonスクリプトでは、次のようなことをしています:

for i in persons:
    for j in persons[-1(len(persons) - i - 1:]:
        if j.name in i.name:
            #remove j.name
        else: 
            #remove i.name

    #For every person (i), iterate trough every other person (j) after person (i)
    #The reason I ask this question is because sometimes I will remove person i.
    #When that happens, the index still increases and jumps over the person after i
    #So I want to decrement the index so I don't skip over that person.

多分私はこれを完全に間違った方法で行っているのかもしれません.whileループを使用してインデックスを制御する必要があるかもしれません.

4

2 に答える 2

6

Python for ループのインデックスをどのように制御しますか? (または、できますか?またはする必要がありますか?)

できません/すべきではありません-ループ制御変数は、各反復の終わりに、反復しているものの次の要素に再割り当てされます(そのため、効果i = i + 1はありません。iとにかく次の繰り返し)。そのようにインデックスを制御したい場合は、ループを使用する必要がありますwhile

i = 0
while i < 10:
    print i
    i = i + 1

とはいえ、Python のrange機能は想像以上に柔軟です。たとえば、2 のステップで反復するには、単純に次のようなものを使用できます。

for i in range(0, 10, 2):
    print i
于 2013-03-29T16:36:21.220 に答える
0

range こちらのドキュメント、または docstr から確認してください。

range([start,] stop[, step]) -> list of integers

Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
These are exactly the valid indices for a list of 4 elements.

0 ~ 10 の範囲を取得するには、次のようにします。

> for i in range(0, 11):
>     print i

> 0
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10

ところで、i = i + 1for ループのすべての反復で i が再び変更されるため、 を実行しても意味がありません。ループ内で何を設定しても、ループが最初からやり直すたびに上書きされます。

于 2013-03-29T16:35:26.547 に答える