用python计算列表中以空格分隔的字符串中的特定字符串的最具python风格的方法

用python计算列表中以空格分隔的字符串中的特定字符串的最具python风格的方法,python,python-3.x,Python,Python 3.x,我有一个清单,看起来像是['2500万美元','2200万美元','33亿美元],我想数一数有多少次,亿美元出现了 我正在使用下面的脚本,但我想知道它是否是最具python风格的方式 million = 0 billion = 0 not_mb = 0 for price in money_lower: if price.split().count('million') > 0: million += 1 elif price.split().count('billion'

我有一个清单,看起来像是
['2500万美元','2200万美元','33亿美元]
,我想数一数有多少次,亿美元出现了

我正在使用下面的脚本,但我想知道它是否是最具python风格的方式

million = 0
billion = 0
not_mb = 0
for price in money_lower:
  if price.split().count('million') > 0:
    million += 1
  elif price.split().count('billion') > 0:
    billion += 1
  else: not_mb += 1

collections.Counter
是您进行此类操作的最佳选择。您需要对列表进行预处理以提取百万/十亿

>>> collections.Counter(item.split()[1] for item in money_lower)
Counter({'million': 2, 'billion': 1})

(注意,这比您的解决方案更优雅,但效率不高,因为它需要对数据进行两次传递。)

您还可以将列表连接到字符串并使用:


您可以选择列表
money\u lower
中包含特定单词(例如
million
billion
)的元素,如下所示:

money_lower = ['$25 million', '$22 million', '$3.3 billion']

million =  [m for m in money_lower if "million" in m]
billion =  [b for b in money_lower if "billion" in b]
print("Count of the string million: ", len(million))
现在您有两个列表(百万,十亿),其中包含
money\u lower
列表的目标元素。如果要了解列表中有多少元素,可以使用
len()
函数,如下所示

money_lower = ['$25 million', '$22 million', '$3.3 billion']

million =  [m for m in money_lower if "million" in m]
billion =  [b for b in money_lower if "billion" in b]
print("Count of the string million: ", len(million))

虽然所有其他的答案都是绝对的,非常优雅,但这并不总是最重要的事情。实际上,到目前为止,您的原始代码是唯一一个对列表进行一次检查的代码。我可能会简化一下:

for price in money_lower:
  if 'million' in price: million += 1
  elif 'billion' in price: billion += 1

否则,您的代码很容易阅读和执行(单次计数)。

我选择此作为最佳答案,因为我对我的数据做了一个糟糕的假设,这实际上发现了一个错误。我在列表中有15k个条目,其中一个是“数亿美元”。这对于简化我的脚本也是一个很好的选择,谢谢!