2017-10-07 51 views
0

我想知道是否有可能使这与列表理解。 行“总= 0”是什么让错误python列表理解for循环和语句

listoflists=[[1,2,5],[1,1,1],[1,2,2,2,1]] 
result=[] 

for lis in listoflists: 
    total = 0 
    for i in lis: 
     if i==1: 
      total+=1 
    result.append(total) 

所有我能想到的是

result = [total for lis in listoflists total=0 for i in lis if i==1 total +=1] 

不过,当然是不行的,我无法找到如何处理报表未IFS或

任何帮助,将不胜感激

+0

单靠列表理解是不可能的。 –

回答

0

这是不可能的,只是简单的列表推导。

如果您还可以使用一些函数,则可以使用[sum(filter(lambda x: x == 1, l)) for l in listsoflists]

编辑:

[l.count(1) for l in listsoflists]当然更好。

1

您可以简单地这样做是为了得到1的总数:

result = sum([l.count(1) for l in listoflists]) 

或情况下,你需要在子阵列个别情况,这应该这样做:

result = [l.count(1) for l in listoflists] 

所以,

listoflists = [[1,2,5],[1,1,1],[1,2,2,2,1]] 
result = sum([l.count(1) for l in listoflists]) # result = 6(1+3+2) 

和:

listoflists = [[1,2,5],[1,1,1],[1,2,2,2,1]] 
result = [l.count(1) for l in listoflists] # result = [1, 3, 2] 
1
> listoflists=[[1,2,5],[1,1,1],[1,2,2,2,1]] 
> [sum([x for x in xs if x == 1]) for xs in listoflists] 
> [1, 3, 2] 
0

虽然在这种情况下

[l.count(1) for l in listoflists] 

是一种有效的答案。

从概念上来说,您可以使用reduce来处理您的案例total中的一些任意聚合(不同于简单总和)。

from functools import reduce 
[reduce(lambda total,x:total + (1 if x==1 else 0),l,0) for l in listoflists]