You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

列表推导式多索引问题:如何实现返回偶数索引字符列表的函数?

解决思路:用enumerate()获取准确索引

嗨,我完全懂你碰到的麻烦——str.index()方法确实只会返回第一个匹配字符的索引,所以当字符串里有重复内容时,这种方式根本没法拿到每个元素真正的位置,自然会出错。比如如果你的输入是"aabbcc",第二个'a'调用st.index('a')还是会得到0,导致它被错误地排除在结果外。

最佳解决方案:用enumerate()内置函数

Python里专门有个工具能完美解决这个问题——enumerate()。它会遍历可迭代对象(比如你的字符串),同时返回每个元素的真实索引和对应的元素值。修改后的代码如下:

def even_chars(st):
    if len(st) < 2 or len(st) > 100:
        return 'invalid string'
    else:
        # 这里保留了你原代码的判断逻辑(取奇数索引的元素)
        # 如果需要偶数索引(0、2、4...),改成 idx % 2 == 0 即可
        return [char for idx, char in enumerate(st) if idx % 2 != 0]

另一种思路:直接遍历索引本身

如果你不想用enumerate(),也可以直接通过range()遍历字符串的索引范围,然后根据索引取值:

def even_chars(st):
    if len(st) < 2 or len(st) > 100:
        return 'invalid string'
    else:
        return [st[idx] for idx in range(len(st)) if idx % 2 != 0]

这种方法也能避开index()的问题,因为我们直接操作的是每个位置的真实索引,而不是通过字符去反向查找索引。

为什么你的原方法不行?

再明确一下:st.index(s)只会返回字符串中第一个出现s的位置,比如对于字符串"testtt",所有的t调用index()都会返回1,这就导致后面的t都会被错误地用同一个索引判断,完全不符合你的需求。而enumerate()和直接遍历索引的方式,都是从左到右逐个处理每个位置,所以每个元素的索引都是准确的。

内容的提问来源于stack exchange,提问作者Jan Kowalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:48:11