Python计算多维Lis的唯一元素

2024-05-17 16:19:11 发布

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

我在Python中编写了一个计算2d列表中唯一元素的函数,我想知道如何使它更通用于任意维的列表。到目前为止,我看到的关于通过测试第一个实例是否是一个列表来找到维度的答案似乎并不可靠。请注意,我想避免使用NumPy。你知道吗

有什么建议吗?你知道吗

def count_unique_elements_2d_list(list_2d):
    flat_list = []
    for sublist in list_2d:
        for item in sublist:
            flat_list.append(item)

    unique_recipes = set(flat_list)
    return len(unique_recipes)

Tags: 实例函数答案innumpy元素列表for
3条回答

这是我的快速技巧。它有点不干净,但它很短,相对有效。你知道吗

def get_dimensions(lut):
    dim = 0
    test = lut
    try:
        while test[0]:
            dim = dim + 1
            test = test[0]
    except TypeError:
        return dim

def to_onedimensional(lut, dim, output, counter):
    if(counter == dim - 1):
        for x in lut:
            output.append(x)
    else:
        for x in lut:
            to_onedimensional(x, dim, output, counter + 1)

使用方法如下:

lut = [[[3],[4]], [[2],[3]]]

print(get_dimensions(lut))
output = []
to_onedimensional(lut, get_dimensions(lut), output, 0)
res = set(output)
print(len(res))

输出:

3
3

通过运行两个for循环并仅向集合中添加唯一元素,可以避免使用额外的空间。你知道吗

def count_unique_elements_2d_list(list_2d):
    unique=set()
    for sublist in list_2d:
        for item in sublist:
            unique.add(item)

    return len(unique)

如果元素已经存在,则不会将其添加到集合中。你将得到元素的唯一计数。你知道吗

这将返回unique元素,然后可以调用len。你知道吗

def get_unique(some_array, seen=None):
    if seen is None:
        seen = set()
    for i in some_array:
        if isinstance(i, list):
            seen.union(get_unique(i, seen))
        else:
            seen.add(i)
    return seen

发生了什么事?
这是一个递归问题。如果级别不是一个列表,那么假设它是一个项目,并将其添加到所看到的项目集中。如果它是一个列表,则再次对其运行该函数。你知道吗

相关问题 更多 >