如何在Python中获取不规则数组的长度

7

我正在尝试获取我的列表中的总项目数,该列表是从SQLAlchemy命令更新的,它类似于一个不规则数组,如下所示...

list = [['linux'], ['ML'], ['linux', 'ML', 'Data Science', 'GIT'],['linux', 'Data Science', 'GIT'], ['GIT'], ['ML', 'GIT'], ['linux'], ['linux'], ['linux'], ['Data Science']]
length = len(list)

我得到的输出是:10
如何获取长度为16?也就是列表中项目的总数?
6个回答

3

使用sum和生成器表达式:

lst = [['linux'], ['ML'], ['linux', 'ML', 'Data Science', 'GIT'],['linux', 'Data Science', 'GIT'], ['GIT'], ['ML', 'GIT'], ['linux'], ['linux'], ['linux'], ['Data Science']]
num_items = sum(len(l) for l in lst)

print(num_items)

3
不要使用list,因为已经有一个内置的名称为list。我会假设你想使用“lst”。 如果你的列表很小,可以使用
>>> len(sum(lst, []))
16

不建议在大型列表中使用 sum 进行列表连接,因为这样做的时间复杂度是平方级别的。然而,对于小型输入,这种方法非常简洁,因此可以重新考虑使用。

如果您的列表很大(或者有许多元素),请使用

>>> sum(len(l) for l in lst)
16

谢谢,它起作用了。我只是用“list”来说明我的问题,实际上我的列表名称是“answers”。无论如何,感谢您的帮助。 - Manoj Jahgirdar

0

如果您打算使用len(),请首先考虑将列表压平:

>>> my_list = [['linux'], ['ML'], ['linux', 'ML', 'Data Science', 'GIT'],['linux', 'Data Science', 'GIT'], ['GIT'], ['ML', 'GIT'], ['linux'], ['linux'], ['linux'], ['Data Science']]
>>> len([item for sublist in my_list for item in sublist])
16

我建议不要将列表展平以计算其长度,更有效的方法是计算每个子列表的长度并将它们相加。 - cs95
作者的用例是一个包含16个元素的列表。我不确定他现在是否很在意效率,因此我给了他一个答案,使他能够像以前一样使用len() - Pierre

0

我的代码遍历嵌套列表,并获取列表中每个嵌套列表的len。然后,我只需将“store”相加并提供所需的输出。这是我的代码:

list_1 = [['linux'], ['ML'], ['linux', 'ML', 'Data Science', 'GIT'],['linux', 'Data Science', 'GIT'], ['GIT'], ['ML', 'GIT'], ['linux'], ['linux'], ['linux'], ['Data Science']]
store = [len(x) for x in list_1]
print(sum(store))

0
如果您有一个非常“崎岖”或完全随机嵌套的列表,可以使用类似下面的递归函数:
>>> a = [1, [1, 3, 4], [[0, 5], 2, 3]]
>>> len_rec = lambda l: sum(len_rec(i) for i in l) if isinstance(l,list) else 1
>>> len_rec(a)
8

0

totalLen = 0 for inner in list: totalLen = totalLen + len(inner) 如果您想深入到多个级别,我建议您编写一个递归函数来执行类似的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接