0

我对 Python 还很陌生,但对编程很满意(尽管大约 5 年没有做过任何事情)。

我已经搜索但找不到任何可以回答我的问题的东西:

我有许多列表,每个列表中都有值,我正在尝试创建一个通用函数,该函数采用 2 个搜索列表的值,这两个值显然是列表名称,以及要在该列表中搜索的字符串:

list0 = ["name","date","cat","dog"]
list1 = ["house","chair","table"]
list2 = ["tv","dvd","computer","mouse"]

usersearchlist = raw_input("Enter list name: ")
usersearchitem = raw_input("Enter item to search for: ")

def searchmemory(usersearchlist,usersearchitem):
  return usersearchlist.index(usersearchitem)

然后我调用该函数:

print "I found", searchmemory(usersearchlist,usersearchitem)

我收到“ValueError: substring not found”,因为函数调用将文字字符串传递给函数,而不是引用其中包含的值。

希望这是有道理的,我做错了什么吗?

4

2 回答 2

0

我更愿意将列表放入类似于@SimplyKiwi 答案的字典中。


或者,您也可以通过以下方式实现globals()

print "I found", searchmemory(globals().get(usersearchlist, []), usersearchitem)

请注意,尽管在这种情况下,您隐含地授予用户对所有全局变量的访问权限。在大多数情况下,这不是您希望用户能够执行的操作。

于 2013-02-23T21:58:06.183 回答
0

尝试

lists = {"list0" : ["name","date","cat","dog"],
    "list1" : ["house","chair","table"],
    "list2" : ["tv","dvd","computer","mouse"]}

usersearchlist = raw_input("Enter list name: ")
usersearchitem = raw_input("Enter item to search for: ")

def searchmemory(usersearchlist, usersearchitem):
    if (usersearchlist in lists and usersearchitem in lists[usersearchlist]):
        return lists[usersearchlist].index(usersearchitem)
    else:
        return -1

这会将所有列表存储在字典中并首先检查该值是否存在,因此您不应收到 ValueError

于 2013-02-23T21:49:38.567 回答