2012-02-26 11 views
0

私は3つのリストを持っています。ユーザーの操作に応じて、これらのリストはユーザーが利用できる、または利用できない場合があります。リストの名前と状態の両方を4番目のリストに記録する方法です。しかし、私は4番目のリストの文字列値を使って他のリストにアクセスしようとすると問題に遭遇します。文字列値から変数名を抽出する方法はありますか?

つまり、利用可能なリストのすべての文字列をマスターリストに追加したいのですが、どうすればよいですか?

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」]}のような辞書を使用する:あなたはまっすぐにそれを修正したい場合は だから、あなたは、この方法はそれを行うことができ、動物["ペット"]。 globals()とlocals()の使用については忘れてください。 – BatchyX

答えて

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

それはそれを解決しました、ありがとう!私はジップで読んで行くよ。 – ZincAddendum

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[0], masterList[1])と同じ意味zip(*masterList)、。 zipと2つのループ変数を使用することは、2つのリストを同時にルーピングする慣習的な方法です。

余分な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'を使うことはお勧めしません。 –

関連する問題