首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态搜索python列表

动态搜索python列表
EN

Stack Overflow用户
提问于 2016-05-14 15:10:08
回答 4查看 88关注 0票数 0

我希望巩固一个我知道可以改进的功能。

我有一系列的全局列表,我会添加这些列表,并定期添加列表的数量。

在这个函数中,我可以搜索输入字符并返回列表中的列表号和位置。不幸的是,每次我添加一个新列表时,我还必须添加一个新的嵌套try /except ValueError,并使用新的列表名。

我确信,比我更有编码经验的人可以想出一种方法来递归调用这个函数并进行搜索,而无需嵌套这些函数。理想情况下,我想我应该指定多少个"Listx“列表来使用接受字符串和整数的函数进行搜索?

代码语言:javascript
运行
复制
def findInLists(inputString):

    line = 0
    output = 0

    try:
        output = List1.index(inputString)
    except ValueError:
        line += 1
        try:
            output = List2.index(inputString)
        except ValueError:
            line += 1
            try:
                output = List3.index(inputString)
            except ValueError:
                line += 1
                try:
                    output = List4.index(inputString)
                except ValueError:
                    output = -1
    return str(line) + str(output)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-14 15:34:47

在澄清之后进行修改--因此,您愿意在搜索之前指定固定数量的列表:

代码语言:javascript
运行
复制
def _search_lists(phrase,numb_of_lists):
    for n in range(1, numb_of_lists + 1):
        list_name = "list" + str(n)
        list_to_search = eval(list_name)
        if search phrase in list_to_search:
            return n, list_to_search.index(search_phrase)
    return 0,0

返回的是列表号和索引位置,如果不在任何列表中,则为(0,0)

注意,许多人警告说使用eval函数的危险,但在这种情况下,假设它是您的代码,您应该是好的。

票数 0
EN

Stack Overflow用户

发布于 2016-05-14 15:32:59

如果您只想避免嵌套,请使用早期的return

代码语言:javascript
运行
复制
def findInLists(inputString):

    line = 0
    output = 0

    try:
        output = List1.index(inputString)
        return str(line) + str(output)
    except ValueError:
        line += 1
    try:
        output = List2.index(inputString)
        return str(line) + str(output)
    except ValueError:
        line += 1
    try:
        output = List3.index(inputString)
        return str(line) + str(output)
    except ValueError:
        line += 1
    try:
        output = List4.index(inputString)
        return str(line) + str(output)
    except ValueError:
        output = -1
    return str(line) + str(output)

现在这仍然是很多重复的逻辑,不是吗?但现在更容易将其重构为for-loop。

票数 0
EN

Stack Overflow用户

发布于 2016-05-14 15:36:11

你实际上想要搜索一个列表。因此,您应该列出一个列表,而不是在变量名称上使用后缀。

因此,这样的东西应该适合你的需要:

代码语言:javascript
运行
复制
def find_it(lists, val):
    idxVal = -1
    idxList = -1
    for l in lists:
        try:
            f = l.index(val)
        except: 
            pass
    return idxList, idxVal 

 listIndex, valueIndex = find_it([List1, List2, List3], "foo")

当然,这只是许多可能的解决方案中的一种(您可以递归地、尾优先、使用reduce()等等)。

一般来说,如果你觉得你有很多相同类型的东西,你应该使用列表。在变量名后缀是一种代码气味。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37228300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档