【发布时间】:2015-04-30 16:38:50
【问题描述】:
以下代码从日期值的有序列表中获取最后一个当前值:
def test_get_last_value(self):
dated_optional_values = [(datetime.datetime(2015, 2, 23), None),
(datetime.datetime(2015, 2, 24), 1.23),
(datetime.datetime(2015, 2, 25), None),
(datetime.datetime(2015, 2, 26), 2.34),
(datetime.datetime(2015, 2, 27), None),
]
present_values = [dated_optional_value[1] for dated_optional_value in dated_optional_values
if dated_optional_value[1] is not None]
last_present_value = present_values[-1]
print('last_present_value=', last_present_value)
我可以很容易地编写一个循环,从列表的末尾开始,然后迭代,直到找到一个值。
有没有更 Pythonic 的方式来实现这一点?
【问题讨论】:
-
使用
reversed()和find the first non-Nonevalue -
我不认为
reversed()比您已有的解决方案更好。将列表过滤到新列表中是常见的和“pythonic”。 -
@tdelaney:
reversed()允许您避免在结尾附近有非None值时不必要地枚举所有值。与any()、all()函数一样具有短路行为。在 OP 的情况下这并不重要,因为列表很短。但我没有看到任何迹象表明标题中应该有一个非常小的列表。
标签: python python-2.7