我有一个脚本来检查列表中是否有一个或多个相同的项目。这是代码:
items = ["Blue", "Black", "Red"]
def isUnique(item):
seen = list()
return not any(i in seen or seen.append(i) for i in item)
print(isUnique(items))
Run Code Online (Sandbox Code Playgroud)
如果给定列表中的所有项目都是唯一的,则打印“True”;如果列表中的一个或多个项目是唯一的,则打印“False”。有人可以any()为我解释一下脚本的部分吗,因为我不完全理解它是如何工作的?
append这段代码是一种黑客攻击,因为它使用了带有副作用的生成器表达式,并利用了return 的事实None,而这是假的。
以命令式风格编写的等效代码如下所示:
def isUnique(items):
seen = list()
for i in items:
if i in seen or seen.append(i):
return False
return True
Run Code Online (Sandbox Code Playgroud)
那里or仍然有点奇怪 - 它被用于其短路行为,因此append仅当i in seen为 false 时才被调用 - 所以我们可以像这样重写它:
def isUnique(items):
seen = list()
for i in items:
if i in seen:
return False
else:
seen.append(i)
return True
Run Code Online (Sandbox Code Playgroud)
这是等效的,因为append仅当i in seen为 false 时才调用,并且对appendreturns 的调用None意味着return False在这种情况下该行不应执行。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |