我有三个清单。根据用户交互,这些列表可能对用户可用或不可用,我设置它的方式是通过第四个列表跟踪列表名称和状态。但是当我尝试使用第四个列表中的字符串值来访问我的其他列表时,我遇到了麻烦。
也就是说,我想将可用列表中的所有字符串添加到主列表中 - 我应该怎么做呢?
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的初学者。非常感谢任何帮助。
答案 0 :(得分:4)
您应该用一个domesticated
替换三个变量pets
,wildlife
和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'),
[])
答案 1 :(得分:0)
您不应该使用字符串,而应该使用变量本身。我还将脚本更改为使用zip
:zip([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
答案 2 :(得分: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