2017-10-09 61 views
0

我讀了一個動態變化的樹,其值以不均勻的嵌套列表的形式獲得。如何獲得python中不均勻嵌套列表的最後一個值

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

名單格局的變化對不同的樹,但在所有的情況下,我想最後一個值即VM3這裏,所以是有功能或方式來獲得嗎?

回答

2

您可以使用循環以保持每個嵌套列表獲取最後的時間,直到達到一個非列表實例:

val = lst[-1] 
while isinstance(val, list): 
    val = val[-1] 
+1

@ Jean-FrançoisFabre無需 –

+0

@ Jean-FrançoisFabre最後一次迭代已經做到了。 –

+0

我的不好。我的代碼很相似,但需要最後一個階段。 –

2

您可以使用如下遞歸函數:

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()對象,該對象在每次迭代中接受輸入數據。在這種情況下,你會在最後拿出最新的產品。然後,您可以使用一個切片獲取最後一個項目。

相關問題