我有一个看起来像['$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
答案 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
中选择包含特定词(例如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]
现在您有2个列表( million,billion ),其中包含money_lower
列表中的目标元素。如果要了解列表中有多少个元素,可以按以下方式使用len()
函数;
print("Count of the string million: ", len(million))