python中列表的特定元素的总和

时间:2015-12-05 01:47:34

标签: python list python-3.x count

  

要求的是一个列表,其中包含给定索引的所有2个出现次数。

例如:

[1, 2, 2]
[2, 1, 1]
[1, 1, 2]

给出

[1,1,2]

虽然

[2, 2, 2]
[2, 1, 2]
[2, 2, 1]

给出:

[3,2,2]

2 个答案:

答案 0 :(得分:4)

如果我正确理解了问题,你可以尝试将矩阵向右旋转90度,然后计算矩阵中每行中两个的数量:

from numpy import array

l = [[1, 2, 2, 1, 1], [1, 1, 2, 2, 2], [1, 1, 1, 2, 2], [2, 2, 1, 2, 2], [2, 2, 1, 1, 1]]

result = [cur_l.count(2) for cur_l in array(l).T]

输出

print result
[2, 3, 2, 3, 3]

修改

这是一个没有numpy的解决方案:

>>> [cur_l.count(2) for cur_l in map(list, zip(*l))]
[2, 3, 2, 3, 3]

答案 1 :(得分:2)

迭代长度为五个列表的每个索引,然后查看l中包含2的所有索引。如果是,请将1添加到计数器。在查看l。

中的每个子列表后,将该计数器附加到新列表
l = [[1, 2, 2, 1, 1],
    [1, 1, 2, 2, 2],
    [1, 1, 1, 2, 2],
    [2, 2, 1, 2, 2],
    [2, 2, 1, 1, 1]]

output = []
for i in range(0, len(l[0])):
    sum = 0
    for j in range(0, len (l)):
        if l[j][i] == 2:
            sum += 1
    output.append(sum)

print output

输出:

[2, 3, 2, 3, 3]