【问题标题】:Find an element in an irregular list in python在python中查找不规则列表中的元素
【发布时间】:2016-12-16 17:38:59
【问题描述】:

我有以下课程

class A:
    def __init__(self, elements):
        self.elements = elements

我需要编写一个函数,它接受它的两个实例,并查找实例 1 是否在实例 2 的元素中。这是一个不规则列表,因为这些元素包含更多任意深度的 A 实例。

我想要一些类似的东西:

def is_element_in(instanceA1, instanceA2):

    found = False

    for inherit in instanceA2.instanceof.inherits:
        if instanceA1 == inherit:
            found = True
        else:
            n_inherit(instanceA1, inherit)

    return found

写这个的最好方法是什么?我读了一些关于扁平化列表的答案。我不知道这是否是最好的主意,因为我必须访问字段才能获取我的元素列表。有没有可以在这里使用的python库?

【问题讨论】:

  • 让我看看有没有得到它。您有一些类似[[1, 2], [3], [[4], 5]] 的列表,并且想查找号码4
  • 是的,我想要它,所以如果有 4,我返回 true

标签: list python-3.x recursion


【解决方案1】:

一个可能的解决方案是

def is_element_in(items, element):
    for item in items:
        if item == element:
            return True

        if isinstance(item, list) and is_element_in(item, element):
            return True

    return False

items = [[1, 2], [3], [[4], 5]]

print(is_element_in(items, 4))
print(is_element_in(items, 0))

打印

True
False

【讨论】:

  • OP 说,嵌套深度是任意的。我们可能应该尝试迭代方法而不是递归。
  • 递归执行非常直观,所以我认为不需要另一种方法。您可能会说出于性能原因,我同意您的观点,但目前这不是问题。无论如何,我们正在重新发明轮子(它肯定已经在一些知名的库中实现,应该使用它来代替)。
猜你喜欢
  • 2012-04-11
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2010-10-10
  • 2021-06-25
  • 1970-01-01
  • 2022-12-28
  • 2010-11-16
相关资源
最近更新 更多