2015-05-18 29 views
-4

當列表名稱和指標不在同一個字符串中且未指定指標數量時,如何調用列表?除了if和else,還有其他方法嗎?它們不在同一個變量中,因爲指標可能是可選的並且可能會發生變化。 實施例(當amiunt指標只能是2):如何在未指定指標數量時調用列表

def Function(a, indicators): 
    print a[indicators[0]][indicators[1]] 

我所需要的是這樣的代碼,但處理8個指標和0的指標沒有錯誤。

在此先感謝您的幫助。

編輯: 案例1:

a = [[[12, 7]], [["a"], ["b"]], [[4, "p", 3], ["17", "c"]]] 
indicators = [2, 0, 1] 

而且我想功能打印頁。

案例2:

a = "I AM UNIVERSAL!" 
indicators = None 

而且我想功能打印I AM通用!

如果我拼寫錯誤或做了任何誤導性的事情,我很抱歉,但我是外國人,而且我的英語不太好。

+0

,你問題現在沒什麼意義。 –

+0

@Trotom你的問題缺乏很多東西,指標和列表是什麼樣子的? – ZdaR

+0

我不知道你在問什麼。 btw:不要使用'list'作爲變量名稱。它會踩着'list()'函數。 – dawg

回答

0

聽起來像你問:「我如何重構這個,所以它適用於任何大小的indicators列表?」

def Function(list, indicators): 
    if len(indicators) == 1: return list[indicators[0]] 
    if len(indicators) == 2: return list[indicators[0]][indicators[1]] 
    if len(indicators) == 3: return list[indicators[0]][indicators[1]][indicators[2]] 
    if len(indicators) == 4: return list[indicators[0]][indicators[1]][indicators[2]][indicators[3]] 
    #etc forever 

您可以使用for循環迭代應用索引。

def Function(list, indicators): 
    x = list 
    for index in indicators: 
     x = x[index] 
    return x 

(附帶風格提示:list考慮一個不同的名稱,因爲這已經是一個內置值的名稱),我認爲你需要添加一個更具體的例子

+0

這可以做爲一個表達式,而不使用額外的變量?接近這個:'a = [12,6,[7,「v」]]; i = [2,1];在範圍內打印一個[i [j](len(a [2]))]' – Trotom

+0

與列表理解不符,你不能。如何減少(lambda x,y:x [y],指標,a)? (如果你使用的是Python 3,你需要從'functools'中導入'reduce') – Kevin

+0

它幾乎可以完成這個工作,但是reduce()會返回給定元素的值,當我想改變這個元素的值時。 – Trotom