Python嵌套for循环优化问询:能否将找可整除数对的代码压缩为1-2行?
如何将找可整除数对的代码压缩为1-2行?
当然可以!虽然这种紧凑写法确实不够Pythonic(毕竟Python的核心原则之一是「可读性至上」),但咱们完全能把逻辑塞进1-2行里,下面给你几种实现方式:
方法1:用生成器表达式 + next()
直接获取第一个符合条件的数对:
nums = [3, 6, 2, 7] first_valid_pair = next((x, y) for i, x in enumerate(nums) for y in nums[i+1:] if x % y == 0 or y % x == 0)
- 用
enumerate拿到索引,避免重复比较同一组数字(比如不会同时检查(3,6)和(6,3)) - 如果列表中没有符合条件的数对,
next()会抛出StopIteration,可以加默认值避免报错:next(..., None)
方法2:借助itertools.combinations
利用itertools.combinations直接生成所有不重复的两两组合,再筛选:
from itertools import combinations first_valid_pair = next((a, b) for a, b in combinations(nums, 2) if a % b == 0 or b % a == 0)
这种写法更简洁,因为combinations已经帮我们处理了不重复配对的逻辑,不需要手动管理索引。
如果想获取所有符合条件的数对,只需要把next()换成list()即可:
all_valid_pairs = [(a, b) for a, b in combinations(nums, 2) if a % b == 0 or b % a == 0]
小提醒
虽然这些写法能压缩代码,但可读性远不如你原来的嵌套循环,尤其是对其他维护代码的人(甚至几周后的你自己)来说,理解逻辑会更费力。所以实际项目中,还是推荐保持清晰的代码结构,除非是在一些追求极简的场景下使用~
内容的提问来源于stack exchange,提问作者acs14007
相关产品推荐
相关产品推荐

