python - 带有值检查的生成器表达式
问题描述
我有以下代码片段来找出给定数字列表中的任何一对是否与给定总和匹配。
我已经实现了如下功能
def google(numbers, total):
complement =[]
for x in numbers:
if x in complement:
return True
else: complement.append(total-x)
return False
print google([1,2,3,4,5],8)
我的问题是,是否有任何可能的方式将其实现为生成器表达式。?
例如,有没有办法检查当前部分创建的生成器是否在理解中具有给定值?
解决方案
如果你真的想这样做,一切皆有可能,但并非所有事情都是可取的:
from itertools import combinations, dropwhile
def google(numbers, total):
return bool(next(dropwhile(lambda c: sum(c) != total, combinations(numbers, 2)), False))
我们遍历所有可能的 2 数组合numbers
usingcombinations
并将它们与total
.
使用dropwhile
,我们可以模拟原始代码的短路行为,仅获得满足条件的第一个组合(如果存在)。然后,它将作为非空tuple
值转换为布尔文字True
。否则,next
将看到它dropwhile
为空,并返回默认值False
。
测试:
print(google([1, 2, 3, 4, 5], 8))
print(google([1, 2, 3, 4], 8))
输出:
True
False
推荐阅读
- android-studio - 如何从 GitHub 构建示例 Android 位置应用程序
- javascript - 在表中渲染多个组件反应
- domain-driven-design - ddd中上游上下文和下游上下文的关系
- c - 2 的不同幂的十进制和十六进制表示
- python - 使用带有 OpenCV 运动跟踪的 IP 网络摄像头
- python - 将另一个数组与一个充满数组的列表进行比较
- parquet - http request with parquet and pyarrow
- python - 根据数据来源的 url 组织抓取的数据
- java - 如何使用 Mockito 模拟并使用 Junit5 断言抛出的异常和消息?
- reactjs - 如何将我的状态从对象转换为可映射数组?