在Python中统计二维列表

14

如何计算这个二维列表中“命中”的项的数量?

grid = [['hit','miss','miss','hit','miss'],
     ['miss','miss','hit','hit','miss'],
     ['miss','miss','miss','hit','hit'],
     ['miss','miss','miss','hit','miss'],
     ['hit','miss','miss','miss','miss']]

battleships = 0
for i in grid:
    if i == "hit":
    battleships = battleships + 1
print battleships
我知道这段代码是有问题的,但它给了我想要做的一些想法,希望可以实现吗?
谢谢。

1
如果写成 if i == "hit": 就是错误的,因为 i 是一个列表。 - Grijesh Chauhan
3个回答

22

使用list.count方法:

>>> ['hit','miss','miss','hit','miss'].count('hit')
2

>>> grid = [['hit','miss','miss','hit','miss'],
...      ['miss','miss','hit','hit','miss'],
...      ['miss','miss','miss','hit','hit'],
...      ['miss','miss','miss','hit','miss'],
...      ['hit','miss','miss','miss','miss']]
>>> [row.count('hit') for row in grid]
[2, 2, 2, 1, 1]

并且 sum函数:

>>> sum(row.count('hit') for row in grid)
8

1
你能解释一下为什么[row.count('hit') for row in grid]要放在括号里吗?另外,这个计数是如何在嵌套列表中进行的?比如,如果我写了print grid.count("hit"),为什么它不会遍历所有的列表进行计数呢?我知道我可以写像grid[1].count这样的代码来计算第二个列表中的元素数量,但是你的代码是如何访问所有嵌套列表的内容的呢? - user2212774
1
@user2212774,这是关于编程的内容,列表推导式。'list.count' 不会搜索嵌套列表,它只匹配其项。 - falsetru

2
如果我有很多使用2D列表的代码,我会创建一个生成器,返回2D列表中的每个元素:
def all_elements_2d(l):
    for sublist in l:
        for element in sublist:
            yield element

然后你可以用它做其他事情,比如计算所有“hit”字符串的数量:

hits = sum(element == 'hit' for element in all_elements_2d(grid))

0
Transaction=[['Mango','Onion','Jar','Key-chain','Eggs','Chocolates'],
['Nuts','Onion','Jar','Key-chain','Eggs','Chocolates'],
['Mango','Apple','Key-chain','Eggs'],
['Mango','Toothbrush','corn','Key-chain','Chocolates'],
['corn','Onion','Key-chain','Knife','Chocolates']
]
count1=[['Mango',0],['Onion',0],['Jar',0],['Key-chain',0],['Eggs',0],
['Chocolates',0],['Nuts',0],['Apple',0],['Toothbrush',0],['corn',0],['Knife',0]]
for j in range(0,10):
 x=0
for i in range(0,5):
 x=x+Transaction[i].count(count1[j][0]);
count1[j][1]=x
print count1

你应该解释代码并添加一些文本说明,而不仅仅是简单地复制粘贴。 - Kristijan Iliev

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