gpt4 book ai didi

python - 在类实例列表中的列表属性中查找匹配项

转载 作者:行者123 更新时间:2023-11-28 22:03:54 25 4
gpt4 key购买 nike

我有一个类“Foo”,它有一个名称(字符串)和一组数据(整数列表)。我需要能够针对 Foo 的列表找到“测试”任何字符串/列表组合,以找到任何匹配项。像这样:

class Foo:
def __init__(self, name, data):
self.name = str(name)
self.data = list(data)


foo1 = Foo('abc', [1, 2, 3])
foo2 = Foo('def', [4, 5, 6])
foo3 = Foo('ghi', [7, 8, 9])

my_list = [foo1, foo2, foo3]

def test(name, data):
results = []
for foo in my_list:
if foo.name == name:
for number in data:
if number in foo.data:
results.append(number)
return name, results

print test('def', [2, 3, 4, 5])

会回来

('def', [4, 5])

同时...

print test('gah', [1, 2, 3])

会回来

('gah', [])

这基本可行,但看起来有点傻。我希望有一种方法可以使用列表理解或生成器来使其更漂亮。我不一定要将所有内容都扁平化为一个单行表达式,因为我预计这几乎不可能阅读,但我怀疑有更好的方法来做到这一点。

最佳答案

看来您可以重构代码中的许多内容,使其运行得更好。

首先,我不考虑将数据作为列表,而是考虑一个集合。这将允许您使用 data.intersection(otherdata) 来获得重叠。

接下来,不是 Foo 实例的列表,也许是一个以它们的名字为键的字典?这样您就可以通过测试名称对其进行索引,而不必遍历实例列表来找到合适的实例。

class Foo:
def __init__(self, name, data):
self.name = str(name)
self.data = set(data)


foo1 = Foo('abc', [1, 2, 3])
foo2 = Foo('def', [4, 5, 6])
foo3 = Foo('ghi', [7, 8, 9])

my_lookup = dict((f.name, f) for f in [foo1, foo2, foo3])

def test(name, data):
if name in my_lookup:
return name, my_lookup[name].data.intersection(data)
return name, []

我意识到,如果您测试一个您没有的名字,您会得到一个 KeyError,所以我调整它以适本地处理这个问题。

关于python - 在类实例列表中的列表属性中查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com