如何在for循环内将i增加3

2024-09-28 19:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个随机X和Y的列表,例如[XXYXYYX]

我想看到一个X,递增计数,然后跳过接下来的两个数字

例如[XXXY]=1和[XXXYX]=2

for i in range(0,len(arr)):
        if arr[i] == 'X':
            count+=1
            i+=2
        
    return count

我的解决方案不是直接跳过X后面的两个值

示例测试:'XYXXXXXX' 回答错误(得到7个期望值3个)

示例测试:'xxyxxy' 回答错误(预期得到5个2个)

示例测试:'XXXX' 回答错误(得到4个期望值2个)


Tags: in示例列表forlencount错误range
3条回答

for循环正在更改“i”变量,因此如果向其添加2,则不会发生任何更改。我的意思是‘I’的值改变了,但只有在这一次。紧接着,它被再次设置,并有一个新的值(由for循环设置)

这是我的解决办法

s = 'XYXXXXXYX'

count = 0
i = 0
while i < len(s):
    if s[i] == 'X':
        count += 1
        i += 3
    else:
        i += 1
print(count) # 3


#With the for loop
count = 0
skipped = 0
is_skipping = False
for i, letter in enumerate(s):
    if not is_skipping:
        if letter == 'X':
            count += 1
            is_skipping = True
    else:
        skipped += 1
        if skipped > 2:
            is_skipping = False
            skipped = 0
print(count) # 3

您的i += 2没有任何有用的效果,因为for循环将i设置为范围内的下一个值

您可以自己将范围转换为迭代器,这样您就可以访问它,并在'X'之后丢弃接下来的两个索引,从而使其工作:

arr = 'XYXXXXXYX'

count = 0
indexes = iter(range(len(arr)))
for i in indexes:
    if arr[i] == 'X':
        count += 1
        next(indexes, None)
        next(indexes, None)
print(count)

尽管非索引版本更简单、更清晰:

arr = 'XYXXXXXYX'

count = 0
letters = iter(arr)
for letter in letters:
    if letter == 'X':
        count += 1
        next(letters, None)
        next(letters, None)
print(count)

也许你可以使用简单的i+3

for i in range(0,len(arr)):
        if arr[i] == 'X':
            count+=1
            i = i+3
        
    return count

相关问题 更多 >