Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在这种情况下如何使用reduce?_Python_Python 2.7 - Fatal编程技术网

Python 在这种情况下如何使用reduce?

Python 在这种情况下如何使用reduce?,python,python-2.7,Python,Python 2.7,dlist是一个列表列表。有时dlist值就像: class Solution: def calculateMinimumHP(self, dlist): 子列表仅包含一项。我需要对整个列表值求和。我可以使用for逐个添加值 或者我可以使用reduce() 我写的是: [[1],[2],[3],[4]]..... 这是不正确的,它总是给我错误 赋值前引用的局部变量“z” 如何修复错误?您只需迭代dlist,而不是通过dlist[z] reduce(lambda x,y:x+y, [

dlist
是一个列表列表。有时
dlist
值就像:

class Solution:
    def calculateMinimumHP(self, dlist):
子列表仅包含一项。我需要对整个列表值求和。我可以使用
for
逐个添加值

或者我可以使用
reduce()

我写的是:

[[1],[2],[3],[4]].....
这是不正确的,它总是给我错误

赋值前引用的局部变量“z”
如何修复错误?

您只需迭代
dlist
,而不是通过
dlist[z]

reduce(lambda x,y:x+y, [dlist[z][0] for z in dlist[z]])
更妙的是,你可以像这样

[z[0] for z in dlist]
reduce(lambda x,y: x + y, (z[0] for z in dlist), 0)
要使用的最后一个参数是默认初始值设定项值。使用生成器表达式的优点是,您不必真正构建临时列表,这是您使用列表理解准备的

更多的好消息是,您根本不必使用
reduce
(而且)。使用函数和生成器表达式,如下所示

[z[0] for z in dlist]
reduce(lambda x,y: x + y, (z[0] for z in dlist), 0)

还有一种更有趣的方式:

sum(z[0] for z in dlist)

如果您认为您的输入是一个iterable of iterable(与严格意义上的列表列表相反),您可以
sum
每个内部iterable,然后
sum
求和:

sum(sum(dlist, []))
这样做的好处是可以处理任意一个iterable,而不仅仅是列表列表。它并不假定列表是非空的(
itr[0]
在空列表上会引发一个
索引器
),甚至不假定可以订阅iterables(
itr[some_index]
在生成器上是一个
类型错误
)。唯一的要求是内部iterables必须是sum的有效输入,这意味着它们只包含“类似数字”的对象

我看到的唯一缺点是,它不能断言内部列表严格地每个元素一个,因此格式错误的输入将返回一个看似合理但可能错误的值。也就是说,验证数据和对其进行操作应该是两个不同的步骤:

def sum_of_sums(iterables):
    return sum(sum(itr) for itr in iterables)
顺便说一下,如果您的程序正在处理许多棘手的问题,如列表列表,请查看,尤其是部分