有人能告诉我写这个逻辑的最短方法是什么吗? 我有两个列表list_one和list_two包含一些字母。 如果这两个列表都不包含“B”,我需要打印(真)。 我编写的代码段有效,但我很想知道是否有一种 Pythonic 的方式来编写它,而不是在同一行中重复 'B' 两次。 提前致谢,任何帮助将不 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
检查“目标”列表中的字典中是否存在至少一个特定值的最优雅方法是什么? 我过去一直在使用 or 语句,但这些可能相当长:
d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
if 'six' in d.values() or 'eight' in d.values() or 'ten' in d.values() or 'fifteen' in d.values():
# do something
else:
# do something else
创建一个目标列表,然后遍历该列表以分别根据字典检查每个目标是否更好? 在这种情况下,我还需要在 if/else 块的末尾放置中断以确保它不会被多次触发:
targets = ['six', 'eight', 'ten', 'fifteen']
d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
for t in targets:
if t in d.values():
# do something
break # to ensure the thing isn't triggered multiple times
else:
# do something else
break # to ensure the thing isn't triggered multiple times
有没有推荐的方法来缩短它,或者第二个代码块是否像它一样好?
你可以用下一个替换它:
if any(t in d.values() for t in targets):
pass
else:
pass
在某些情况下,将d.values()
转换为 set 并传递给附加变量会更好。
values = set(d.values())
if any(t in values for t in targets):
# ...
使用集合的 isdisjoint() 方法比将两个集合相交会更快,因为您不需要形成结果集并且该方法将在第一个相交值上返回 False:
if {"six","eight","ten","fifteen"}.isdisjoint(d.values()):
print("None of the values are present")
else:
print("At least one of the values is present")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.