如何在python中获取不均匀嵌套列表的最后一个值

时间:2017-10-09 09:10:46

标签: python

我读了一个动态变化的树,其值以不均匀的嵌套列表的形式出现。

[u'All VMs & Templates', [[u'vSphere 5.5 (nested)', [[u'Datacenter', [[u'Discovered virtual machine', [u'vm1', 'vm2', 'vm3']]]]]]]

不同树的列表模式会发生变化,但在所有情况下我都想要最后一个值,即vm3,所以是否有功能或方法来获取它?

2 个答案:

答案 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()对象,该对象在每次迭代时接受输入数据。在这种情况下,你会在最后提出最新的项目。然后你可以使用一个切片获得最后一个项目。

相关问题