我读了一个动态变化的树,其值以不均匀的嵌套列表的形式出现。
[u'All VMs & Templates', [[u'vSphere 5.5 (nested)', [[u'Datacenter', [[u'Discovered virtual machine', [u'vm1', 'vm2', 'vm3']]]]]]]
不同树的列表模式会发生变化,但在所有情况下我都想要最后一个值,即vm3,所以是否有功能或方法来获取它?
答案 0 :(得分:2)
您可以使用 while 循环在每个嵌套列表中保持最后一次获取,直到到达非列表实例:
val = lst[-1]
while isinstance(val, list):
val = val[-1]
答案 1 :(得分:1)
您可以使用如下的递归函数:
In [61]: def get_last(lst):
last = lst[-1]
if isinstance(last, list):
return get_last(last)
return last
....:
In [62]:
In [62]: get_last(lst)
Out[62]: 'vm3'
但是作为更加Pythonic的方法,我建议如果您从其他地方读取这些数据或创建特殊类型,您可以为此对象添加特定方法。像preserve_the_last()
这样的东西。然后,您可以使用最大长度为1的deque()
对象,该对象在每次迭代时接受输入数据。在这种情况下,你会在最后提出最新的项目。然后你可以使用一个切片获得最后一个项目。