【问题标题】:Counting 2d lists in python在python中计算二维列表
【发布时间】:2014-03-10 12:06:52
【问题描述】:

我如何计算这个 2d 列表中“命中”的项目数??

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

我知道代码是错误的,但它让我知道我想要做什么??

谢谢

【问题讨论】:

  • if i == "hit": 错误,i 是一个列表

标签: python list loops multidimensional-array


【解决方案1】:
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

【讨论】:

  • 你应该解释一下代码,加上一些文字,而不是像那样发布。
【解决方案2】:

如果我的代码经常使用 2D 列表,我会创建一个生成器来返回 2D 列表中的每个元素:

def all_elements_2d(l):
    for sublist in l:
        for element in sublist:
            yield element

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

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

【讨论】:

    【解决方案3】:

    使用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
    

    【讨论】:

    • 你能解释一下为什么 [row.count('hit') for row in grid] 在括号内吗?另外,这是如何在嵌套列表中计数的?即,如果我写了 print grid.count("hit"),为什么不计算所有列表?我知道我可以编写类似 grid[1].count 的内容,它会在第二个列表中计数,但是您的代码如何访问所有嵌套列表的内容?
    • @user2212774,它是list comprehension。 'list.count' 不搜索嵌套列表。它只匹配它的项目。
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2017-07-16
    相关资源
    最近更新 更多