我正尝试为我的程序制作一个可读性更强的日志消息。
为了这个目的,我正在寻找一种方法来实现某种高级的“any”迭代器。
它应该返回满足数据索引的索引或迭代单元格本身,而不是只在满足条件时返回True/False。
下面是一个可能的伪代码,用于说明:
messages = [(0, None),(1, None), (2, "data")]
if any(data is not None for id, data in messages):
print(f"Tuple with data has id: {id} and data: '{data}'.")
else:
print(f"There is no message with filled data")
# should output: "Tuple with data has id: 2 and data: 'data'."
我尝试了几种方法,比如使用walrus运算符、使用***global***运算符、在***if***运算符中打印,甚至实现自己的迭代器
(but这个主题对我来说是新的,所以可能它仍然可以是一个解决方案)
我想避免任何额外的*for循环,以获得更好的优化、可读性和对python的掌握。
感谢您提前提出的任何想法!
2条答案
按热度按时间mwkjh3gx1#
使用一个
for
循环,当找到匹配的元素时跳出。如果你没有跳出,打印消息说什么都没有找到。7tofc5zh2#
如果你真的想要类似于你已经写过的东西,你可以在一个过滤生成器表达式上使用
next()
并捕获StopIteration
,但是我个人认为使用像Barmar suggested这样的普通for循环更清晰。(Here我还避免使用shadowing,即内置的
id
函数。)