有没有办法从字符串值中提取变量名?

2024-06-25 06:45:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三张单子。根据用户的交互,这些列表可能对用户可用,也可能不可用,我设置它的方法是通过第四个列表跟踪列表名称和状态。但是当我试图使用第四个列表中的字符串值来访问其他列表时,我遇到了麻烦。你知道吗

也就是说,我想将可用列表中的所有字符串添加到主列表中-我应该怎么做?你知道吗

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的初学者。非常感谢您的帮助。你知道吗


Tags: 字符串用户列表onpandacat单子dog
3条回答

不应该使用字符串,而应该使用变量本身。我还将脚本更改为使用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

尽管有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

应将三个变量domesticatedpetswildlife替换为单个dict

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'),
    [])

相关问题 更多 >