給定一個具有已知深度n的嵌套串列,可以通過重復 0 索引n次來訪問最頂層的元素,例如
single_nested_list = [{'foo':['bar']}]
double_nested_list = [[{'foo':['bar']}]]
single_nested_list[0]
#returns {'foo': ['bar']}
double_nested_list[0][0]
#returns {'foo': ['bar']}
等等...
事先知道深度變數,并假設需要訪問每個串列的第一個索引,那么訪問具有n深度的嵌套串列的正確語法是什么?
例如,如果我有一個三重嵌套串列,我需要重復索引 3 次:[0][0][0]
triple_nested_list = [[[{'foo':['bar']}]]]
此嘗試失敗:
n = 3
e = [0]
triple_nested_list[[e] * n]
任何有關如何創建 n 重復串列索引的建議將不勝感激!
uj5u.com熱心網友回復:
使用直接遞回怎么樣?
triple_nested_list = [[[1, 2, 3]]]
def get_first(alist):
if alist and isinstance(alist, list):
return get_first(alist[0])
return alist
print(get_first(triple_nested_list)) # 1
uj5u.com熱心網友回復:
您可以使用簡單的 for 回圈來實作此目的:
>>> from operator import itemgetter
>>> def getnesteditem(n,nested_list,index = 0,/):
... initial = triple_nested_list
... getval = itemgetter(index)
... for x in range(n):
... initial = getval(initial)
... return initial
...
>>> triple_nested_list = [[[{'foo':['bar']}]]]
>>> getnesteditem(3,triple_nested_list,0)
{'foo':['bar']}
uj5u.com熱心網友回復:
def levels(l):
if not isinstance(l, list):
yield l
else:
for sublist in l:
yield from levels(sublist)
print(list(levels(l))[0])
輸出:
{'foo':['bar']}
uj5u.com熱心網友回復:
只是為了完成,您也可以使用它,但是:
- 確保深度和索引是可信的。如果它們來自用戶輸入,請勿使用此版本。
- 如果你有可用的,用 ast.literal_eval 替換 eval。
triple_nested_list = [[[{'foo':['bar']}]]]
n = 3
e = '[0]'
statement = 'triple_nested_list' (e*n) ''
indexElement = eval(statement)
print(indexElement)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505436.html
上一篇:將有限的輸入附加到串列中
