使用嵌套if语句编写for循环的Pythonic方法

时间:2017-12-24 20:54:31

标签: python-3.x loops for-loop

假设我有一个包含费用类型的简单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']

3 个答案:

答案 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")