假设我有一个包含费用类型的简单python列表,我想用for循环迭代这些费用。在每次迭代中,如果indice产生正确的费用类型,计数器将被提前1.我可以使用下面的代码轻松编写它,但它没有使用快速运行的for循环。
array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills']
sum = 0
for i in range(len(array)):
if array[i] == 'Groceries':
sum += 1
是否有更多的pythonic方法来编写这个加速执行的循环?我见过的示例看起来像下面的代码片段。注意:下面的代码片段不起作用,它只是我之前见过的加速格式的一个例子,但是没有完全理解。
sum = [sum + 1 for i in array if array[i] == 'Groceries']
答案 0 :(得分:2)
如果它只是计数,请尝试collections.Counter
:
from collections import Counter
array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills']
counts = Counter(array)
print(counts)
# Counter({'Groceries': 2, 'Bills': 1, 'Restaurant': 1, 'Misc': 1})
print(counts['Groceries'])
# 2
答案 1 :(得分:1)
for i in range(len(array)):
绝对是 NOT 迭代数组的Python-ic方式。这是VisualBasic思维,你应该从中解放自己。
如果要迭代数组,只需按如下方式迭代它:
array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills']
for eachItem in array:
...
你在循环中做什么取决于你。如果你想计算清单中的杂货,那么你可以这样做:
array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills']
groceriesTotal = 0
for eachItem in array:
if eachItem == 'Groceries':
groceriesTotal = groceriesTotal + 1
这是简单,清晰和pythonic足以让其他人可读。
答案 2 :(得分:1)
你似乎认为你需要一个列表理解。但列表推导产生列表,你想要一个标量。试试array. count("Groceries")
。