Python如何高效地找到具有特定元素的数组

2024-10-01 19:20:35 发布

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

给定列表(一个列表可以包含另一个列表中的元素)和一个字符串,我想查找包含给定字符串的列表的所有名称。你知道吗

简单地说,我可以使用if语句浏览所有列表,但我觉得有更有效的方法。你知道吗

如有任何建议,我们将不胜感激。非常感谢。你知道吗

简单方法的例子

arrayA = ['1','2','3','4','5']
arrayB = ['3','4','5']
arrayC = ['1','3','5']
arrayD = ['7']

foundArrays = []

if givenString in arrayA:
    foundArrays.append('arrayA')
if givenString in arrayB:
    foundArrays.append('arrayB')
if givenString in arrayC:
    foundArrays.append('arrayC')
if givenString in arrayD:
    foundArrays.append('arrayD')

return foundArrays

Tags: 方法字符串in名称元素列表if语句
3条回答

数组名称?你知道吗

eval()试试这样的方法,但是使用eval()是有害的

arrayA = [1,2,3,4,5,'x']
arrayB = [3,4,5]
arrayC = [1,3,5]
arrayD = [7,'x']

foundArrays = []
array_names = ['arrayA', 'arrayB', 'arrayC', 'arrayD']

givenString = 'x'

result = [arr for arr in array_names if givenString in eval(arr)]
print result

['arrayA', 'arrayD']

简单的一行是:

result = [lst for lst in [arrayA, arrayB, arrayC, arrayD] if givenString in lst]

或者如果您更喜欢功能性更强的风格:

result = filter(lambda lst: givenString in lst, [arrayA, arrayB, arrayC, arrayD])

请注意,这两个都没有给出列表的名称。不过,你不需要知道这些。你知道吗

在列表中查找效率不高,而在集合中查找效率更高。你知道吗

让我们定义您的数据

data = {    # a dict of sets
    "a": {1, 2, 3, 4, 5},
    "b": {3, 4, 5},
    "c": {1, 3, 5},
    "d": {7}
}

然后我们可以像这样搜索

search_for = 3   # for example
in_which = {label for label,values in data.items() if search_for in values}
# -> in_which = {'a', 'b', 'c'}

如果您要经常重复这一点,那么像这样预处理您的数据可能是值得的

from collections import defaultdict

lookup = defaultdict(set)
for label,values in data.items():
    for v in values:
        lookup[v].add(label)

现在你可以简单地

in_which = lookup[search_for]    # ->  {'a', 'b', 'c'}

相关问题 更多 >

    热门问题