用python计数列表中以空格分隔的字符串中的特定字符串的大多数pythonic方法

时间:2019-02-11 18:54:12

标签: python python-3.x

我有一个看起来像['$25 million', '$22 million', '$3.3 billion']的列表,我想计算出现多少次,十亿次。

我正在使用下面的脚本,但是我不知道这是否是最pythonic的方式。

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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

您还可以将列表加入字符串并使用count()

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

money_lower = ''.join(money_lower)
million = money_lower.count('million') 
billion = money_lower.count('billion')

print(million)  # 2
print(billion)  # 1

答案 2 :(得分:2)

尽管其他所有答案肯定都是非常 pythonic elegant ,但这并非总是最重要的事情。到目前为止,您的原始代码实际上是唯一一次进入列表一次的代码。我可能会简化一下:

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

否则,您的代码将易于阅读和执行(通过一次即可计数)。

答案 3 :(得分:0)

您可以从列表money_lower中选择包含特定词(例如millionbillion的元素;

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]

现在您有2个列表( million,billion ),其中包含money_lower列表中的目标元素。如果要了解列表中有多少个元素,可以按以下方式使用len()函数;

print("Count of the string million: ", len(million))