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

问题描述 投票:1回答:3

假设我有一个包含费用类型的简单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']
python-3.x loops for-loop
3个回答
1
投票
for i in range(len(array)):

绝对不是迭代数组的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
投票

如果它只是计数,请尝试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
投票

你似乎认为你需要一个列表理解。但列表推导产生列表,你想要一个标量。试试array. count("Groceries")

© www.soinside.com 2019 - 2024. All rights reserved.