gpt4 book ai didi

python - 将所有嵌套列表中的元素相加

转载 作者:行者123 更新时间:2023-11-28 20:09:13 24 4
gpt4 key购买 nike

我正在将所有嵌套列表中的元素相加,到目前为止我所拥有的是

for i in range(len(b)) :
for j in range(len(b[i])):
total = total + b[i][j]


但是当嵌套列表中存在整数值时,这将不起作用,例如

b = [[1,2], [3,4], [5,6], 1]


在这种情况下,我收到一条错误消息,指出“int”类型的对象没有 len()。在这种情况下我该怎么办?

最佳答案

首先,您向 Python 程序员展示了一个常见的反模式,不要遍历索引,而是遍历对象本身。例如:

for item in b:
do_something(item)

而不是:

for i in range(len(b)):
do_something(b[i])

更清晰、更简单、更快速。

也就是说,您遇到的主要问题是其中一项不是列表,因此它没有长度。

此处更好的选择是使用生成器表达式和 itertools.chain.from_iterable() 来展平列表, 然后使用 the sum() builtin function对元素求和。

>>> import collections
>>> import itertools
>>> b = [[1,2], [3,4], [5,6], 1]
>>> list(itertools.chain.from_iterable(item if isinstance(item, collections.Iterable) else [item] for item in b))
[1, 2, 3, 4, 5, 6, 1]
>>> sum(itertools.chain.from_iterable(item if isinstance(item, collections.Iterable) else [item] for item in b))
22

我们需要生成器表达式,因为 itertools.chain() 不会处理不可迭代的项目,因此我们将 any 放入列表中以解决此问题。

另一种方法是制作您自己的生成器:

def chain_mixed(iterable):
for item in iterable:
try:
for subitem in item:
yield subitem
except TypeError:
yield item

然后你可以简单地做:

sum(chain_mixed(b))

关于python - 将所有嵌套列表中的元素相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457942/

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