Skip to main content
 首页 » 编程设计

Python:计算列表列表中的整体元素

2025年05月04日15duanxz

我想写一个函数,它接受一个数字列表和列表,它又可以包含数字和列表,等等......,并返回列表中某处数字的总数。

示例:[1,[[[0,2],7,3],5,[1,2]],3] 包含 9 个数字。

到目前为止,这是我的代码:

test=[1,[[[0,2],7,3],5,[1,2]],3] 
def flatten(mylist): 
    counter = 0 
    for i in range(len(mylist)): 
        if type(mylist[i]) == int: 
            counter += 1 
        if type(mylist[i]) == list: 
            [item for sublist in mylist[i] for item in sublist] 
            counter += 1 
    return counter 

我想我需要递归地展平子列表。但我收到错误:TypeError: 'int' object is not iterable

请您参考如下方法:

一般方法是首先测试一个项目是否可迭代。不幸的是,str 对象是可迭代的,而在大多数情况下,它们应该算作一个项目,因此不应该被展平。此方法可用于此测试:

def is_iterable(item): 
    """tests whether `item` is an iterable that is not a string""" 
    try: 
        iter(item) 
        return not isinstance(item, str) 
    except TypeError: 
        return False 

然后您可以使用生成器和递归来展平可迭代对象:

def flatten(iterable): 
    for item in iterable: 
        if is_iterable(item): 
            yield from flatten(item) 
        else: 
            yield item 
 
list(flatten([1,[[[0,2],7,3],5,[1,2]],3] )) 
[1, 0, 2, 7, 3, 5, 1, 2, 3] 

然后你只需要另一个测试,内置的 sum 和事实 True 算作 1 而 False 算作 0

sum(isinstance(item, int) for item in flatten(mylist))