2012-02-26 59 views
0

我有三個列表。根據用戶的交互,這些列表可能對用戶可用或不可用,我設置的方式是通過第四個列表跟蹤列表名稱和狀態。但是當我嘗試使用我的第四個列表中的字符串值來訪問我的其他列表時,我遇到了麻煩。任何方式從字符串值中提取變量名稱?

也就是說,我想將可用列表中的所有字符串添加到主列表中 - 我應該如何處理這個問題?

domesticated = ['cow', 'sheep', 'pig'] 
pets = ['cat', 'dog'] 
wildlife = ['giraffe', 'lion', 'panda'] 

masterList = ['domesticated', 'pets', 'wildlife'], ['off', 'on', 'on'] 

def currentLists(): 
    activeList = '' 
    for i in range(len(masterList[0])): 
     if masterList[1][i] == 'on': 
      activeList = activeList + masterList[0][i] 
    return activeList 

電流輸出:

petswildlife 

所需的輸出:

['cat', 'dog', 'giraffe', 'lion', 'panda'] 

我帶來的困惑表示歉意,我與Python一個完整的初學者。任何援助非常感謝。

+1

使用像動物的字典= {「寵物」:「貓」,「DOC」]};動物[「寵物」。忘記使用全局變量()和本地變量()。 – BatchyX 2012-02-26 13:53:48

回答

0

你不應該使用字符串,而是變量本身。我還將腳本更改爲使用zipzip([1, 2, 3], [4, 5, 6]) == [(1, 4), (2, 5), (3, 6)]。你......用它壓縮序列。

domesticated = ['cow', 'sheep', 'pig'] 
pets = ['cat', 'dog'] 
wildlife = ['giraffe', 'lion', 'panda'] 

masterList = zip([domesticated, pets, wildlife], ['off', 'on', 'on']) 

def currentLists(): 
    activeList = [] 
    for e in masterList: 
     if e[1] == 'on': 
      activeList += e[0] 

    return activeList 
+0

解決了它,謝謝!我會在zip上閱讀。 – ZincAddendum 2012-02-26 14:05:57

4

你應該用一個單一的dict更換三個變量domesticatedpetswildlife

animals = {'domesticated': ['cow', 'sheep', 'pig'], 
      'pets': ['cat', 'dog'], 
      'wildlife': ['giraffe', 'lion', 'panda']} 

然後

activeList = [] # not ''! 
for category, status in zip(*masterList): 
    if status == 'on': 
     activeList += animals[category] 

注意zip(*masterList),這意味着相同的zip(masterList[0], masterList[1])。使用zip和兩個循環變量是同時循環兩個列表的慣用方式。

對於額外的Python的點,你可以使用sum追加名單:

sum((animals[category] for category, status in zip(*masterList) 
         if status == 'on'), 
    []) 
0

儘管Gandaro's good advice,通過名稱檢索變量可能

vars(),globals()locals()的功能。 所以,如果你想直接修復它,你能做到這一點是這樣的:

domesticated = ['cow', 'sheep', 'pig'] 
pets = ['cat', 'dog'] 
wildlife = ['giraffe', 'lion', 'panda'] 

masterList = ['domesticated', 'pets', 'wildlife'], ['off', 'on', 'on'] 

def currentLists(): 
    activeList = [] 
    for i in range(len(masterList[0])): 
     if masterList[1][i] == 'on': 
      activeList = activeList + globals()[masterList[0][i]] 
    return activeList 
+1

我不會推薦使用'vars','globals'或'locals'給新手程序員。 – 2012-02-26 15:15:04