Python列表推导式嵌套条件:1-30奇数及5的倍数标记实现
如何用列表推导式实现1-30奇数的特殊标记输出?
我是Python新手,正在学习列表推导式。现需编写代码,输出1到30(包含首尾)的所有奇数,其中5的倍数需标记为“数字x”格式,示例输出为:
[1, 3, '5x', 7, 9, 11, 13, '15x', 17, 19, 21, 23, '25x', 27, 29]
我已用普通for循环加条件判断实现该功能,但写法有点冗余(代码如下):
odds = [] for i in list(range(1,30+1)): if i%2 !=0: odds.append(i) if i%5 == 0: odds.append(f'{i}x') odds.remove(i) print(odds)
尝试用列表推导式实现时失败了,希望得到正确的写法指导。
优化后的循环写法
先给你优化一下原来的循环逻辑,不用先添加再删除元素,直接根据条件判断要添加的内容:
odds = [] for i in range(1, 31): if i % 2 != 0: odds.append(f"{i}x" if i % 5 == 0 else i) print(odds)
对应的列表推导式写法
列表推导式本质就是把循环和条件判断浓缩到一行,这里核心是用三元表达式处理每个奇数的输出形式:
odds = [f"{i}x" if i % 5 == 0 else i for i in range(1, 31) if i % 2 != 0] print(odds)
推导式结构拆解
for i in range(1, 31):遍历1到30的所有整数if i % 2 != 0:过滤出奇数,只处理符合条件的数字f"{i}x" if i % 5 == 0 else i:对每个奇数做二次判断,是5的倍数就生成带x的字符串,否则保留原数字
运行这段代码就能得到你想要的示例输出,逻辑清晰且符合列表推导式的简洁特性。
内容的提问来源于stack exchange,提问作者Oskr
相关产品推荐
相关产品推荐

