Python技术问题:如何编写函数提取元组的奇数索引元素?
搞定提取元组奇数位置元素的问题
嘿,我瞅出问题在哪啦!你现在写的oddTuples函数是在挑元素本身是奇数的项,而不是按元素在元组里的索引位置来提取,这就是结果和你预期不一样的原因~
先理清楚需求和当前代码的差异
你传入的元组((1), (2), (2), (23), (3), (4))其实就是(1, 2, 2, 23, 3, 4)。你想要的是提取从1开始数的奇数位置元素(第1、3、5个),对应Python里从0开始的索引0、2、4;但你的代码现在筛选的是值为奇数的元素(1、23、3),所以输出自然不对啦。
给你两种修正方案,都能达到预期
方案1:遍历索引判断(直观易懂)
直接遍历元组的每个索引,判断是不是你要的位置,把符合条件的元素拼进结果元组:
def oddTuples(aTup): result = () # 遍历每个元素的索引 for idx in range(len(aTup)): # 这里取的是从1开始数的奇数位置(对应0-based的偶数索引) if idx % 2 == 0: result += (aTup[idx],) return result
方案2:用Python切片(简洁到飞起)
Python的元组切片语法[::2]可以直接帮你取从索引0开始、步长为2的元素,完美匹配你的需求,一行代码搞定:
def oddTuples(aTup): return aTup[::2]
测试一下
现在调用print(oddTuples((1, 2, 2, 23, 3, 4))),不管用哪个方案,都会输出你想要的(1, 2, 3)~
要是你说的“奇数索引”是指从0开始的奇数索引(也就是第2、4、6个元素),那只要把切片改成aTup[1::2],或者循环里判断idx % 2 == 1就可以啦。
内容的提问来源于stack exchange,提问作者code_conundrum
相关产品推荐
相关产品推荐

