82

for ループがあるとします。

for i in range(1,10):
    if i is 5:
        i = 7

i一定の条件を満たせば変更したい。私はこれを試しましたが、うまくいきませんでした。どうすればいいですか?

4

5 に答える 5

128

あなたの特定の例では、これはうまくいきます:

for i in range(1, 10):
    if i in (5, 6):
        continue

whileただし、ループを使用したほうがよいでしょう。

i = 1
while i < 10:
    if i == 5:
        i = 7
    # other code
    i += 1

forループは、各反復の開始時に変数 (この場合は)iを list/iterable 内の次の要素に割り当てます。これは、ループ内で何をしてもi、次の要素になることを意味します。ループにはそのwhileような制限はありません。

于 2013-02-09T06:12:55.967 に答える
0

timgebが説明したように、使用したインデックスには毎回for ループの先頭で新しい値が割り当てられました。私が見つけた方法は、別のインデックスを使用することです。

たとえば、これは元のコードです。

for i in range(1,10):
    if i is 5:
        i = 7

代わりにこれを使用できます:

i = 1
j = i
for i in range(1,10):
    i = j
    j += 1
    if i == 5:
        j = 7

また、for ループ内のリスト内の要素を変更する場合、各ループ内の要素を追加または削除した場合は、各ループの最後で範囲を range(len(list)) に更新する必要がある場合もあります。私のやり方は、それを追跡するために別のインデックスを割り当てるようなものです。

list1 = [5,10,15,20,25,30,35,40,45,50]

i = 0
j = i
k = range(len(list1))
for i in k:
    i = j
    j += 1
    if i == 5:
        j = 7
    if list1[i] == 20:
        list1.append(int(100))
    # suppose you remove or add some elements in the list at here, 
    # so now the length of the list has changed
    
    k = range(len(list1))
    # we use the range function to update the length of the list again at here
    # and save it in the variable k

ただし、代わりに while ループを使用する方が便利です。とにかく、これが役立つことを願っています。

于 2021-02-13T18:10:27.540 に答える