Python列表操作需求:查找首个奇数后首个偶数并返回索引间距
解决Python列表中查找奇偶索引间距的问题
Got it,这个需求逻辑很明确,我给你拆解下实现思路,再附上完整代码和测试案例:
核心思路
- 第一步:遍历列表,定位第一个奇数的索引。如果遍历完都没找到,直接返回-1
- 第二步:从第一个奇数的下一个位置开始,继续遍历,定位第一个偶数的索引。如果没找到,同样返回-1
- 第三步:如果两个元素都找到,返回它们的索引差值(偶数索引 - 奇数索引)
完整代码实现
def find_odd_even_gap(numbers): # 查找第一个奇数的索引 first_odd_idx = None for idx, num in enumerate(numbers): if num % 2 != 0: first_odd_idx = idx break # 没找到奇数,返回-1 if first_odd_idx is None: return -1 # 从奇数的下一个位置开始找第一个偶数 first_even_after_idx = None for idx in range(first_odd_idx + 1, len(numbers)): if numbers[idx] % 2 == 0: first_even_after_idx = idx break # 没找到符合条件的偶数,返回-1;否则返回索引差 return first_even_after_idx - first_odd_idx if first_even_after_idx is not None else -1
测试案例验证
我们来跑几个典型场景看看结果:
# 正常情况:第一个奇数后有偶数 print(find_odd_even_gap([2,4,3,6,8])) # 输出1(3的索引是2,之后第一个偶数6的索引是3,3-2=1) # 没有奇数的情况 print(find_odd_even_gap([2,4,6,8])) # 输出-1 # 奇数后没有偶数的情况 print(find_odd_even_gap([1,3,5,7])) # 输出-1 # 第一个元素就是奇数,之后有偶数 print(find_odd_even_gap([5,2,3,4])) # 输出1(5的索引0,之后第一个偶数2的索引1,1-0=1)
这样写的代码逻辑清晰,边界情况也都覆盖到了,你可以直接拿去用,有调整需求的话随时改就行~
内容的提问来源于stack exchange,提问作者JenkinsMa
相关产品推荐
相关产品推荐

