Python中字符串'a'索引查找及列表推导式idx for idx含义疑问
列表推导式中
idx for idx语法解释 先看你给出的代码和输出:
x = 'An apple a day, keeps the doctor away' j = [idx for idx, c in enumerate(x, start = 0) if c == 'a'] print(j)
输出结果:[3, 9, 12, 33, 35]
核心语法拆解
列表推导式本质是用一行代码快速生成列表,结构是:[要生成的元素 for 循环变量 in 可迭代对象 if 过滤条件]
针对你疑惑的部分,逐个拆解:
- 最前面的
idx:这是最终要存入列表的内容,也就是我们要收集的字符'a'的索引。 for idx, c in enumerate(x, start=0):enumerate会把字符串x的每个字符和对应索引配对(start=0表示索引从0开始,这是默认值,可省略)。每次循环时,idx拿到当前字符的索引,c拿到当前字符。if c == 'a':过滤条件,只有当当前字符c是'a'时,才会把对应的idx加入列表。
你纠结的idx for idx其实就是把循环中拿到的idx直接作为列表元素。举个简单例子:[num for num in range(5)]会生成[0,1,2,3,4],这里的num for num就是把循环里的num直接放进列表,和你代码里的逻辑完全一致——只是你的循环用enumerate同时取了索引和字符,再筛选出符合条件的索引。
等价普通循环写法
把列表推导式展开成普通循环,逻辑会更直观:
x = 'An apple a day, keeps the doctor away' j = [] for idx, c in enumerate(x): if c == 'a': j.append(idx) print(j)
这段代码和你写的列表推导式功能完全相同,列表推导式只是把这个多行循环压缩成了一行简洁写法。
内容的提问来源于stack exchange,提问作者Leee Jeff
相关产品推荐
相关产品推荐

