gpt4 book ai didi

python - Python 中的计数和分组

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:32 25 4
gpt4 key购买 nike

我正在研究一个问题,我必须编写一个程序来计算厨师准备的每件元素的数量。顾客可以订购的元素有:沙拉、汉堡包和水。 salad:[# salad] hamburger:[# hamburger] water:[# water] 例如 如果 order = "hamburger water hamburger" 那么函数返回 "沙拉:0 汉堡包:2 水:1"

我的代码是:

def ite(order,item):
v=order.split()
t=[]
for salad in v:
if salad==item:
t.append(item)
v.remove(item)
return len (t)

def item_order(order):
s=ite(order,'salad')
h=ite(order,'hamburger')
w=ite(order,'water')
x='salad:%s hamburger:%s water:%s' %(s,h,w)
return x

但是当我们输入 item_order('water water water') 时,我的程序会打印

salad:0 hamburger:0 water:2  

代替

salad:0 hamburger:0 water:3

如果没有两个连续的单词,它可以正常工作。我该如何纠正这个问题?

最佳答案

解决方案

您可以使用 collections.Counter :

from collections import Counter

def item_order(order, items=('salad', 'hamburger', 'water')):
counter = Counter(order.split())
return ' '.join(['{}: {}'.format(item, counter.get(item, 0)) for item in items])

print(item_order('water water water'))
print(item_order('water salad, salad'))
print(item_order('water hamburger'))

测试一下:

print(item_order('water water water'))
print(item_order('water salad, salad'))
print(item_order('water hamburger'))

打印:

salad: 0 hamburger: 0 water: 3
salad: 1 hamburger: 0 water: 1
salad: 0 hamburger: 1 water: 1

解释

这些项目作为默认参数给出:

def item_order(order, items=('salad', 'hamburger', 'water')):

这使功能更加灵活,因为您可以根据需要提交其他项目:

def item_order(order, items=('salad', 'fruit', 'water')):

这里有意使用元组,因为可变的默认参数(例如列表)可能会导致意外的副作用。这里没问题,但一般来说可能是花瓶。

在将输入字符串的空格分割成一个列表后,Counter 将创建一个新的 counter 实例:

counter = Counter(order.split())

例如:

>>> Counter('water water salad'.split())
Counter({'salad': 1, 'water': 2})

最后,列表理解有助于创建新字符串:

' '.join(['{}: {}'.format(item, counter.get(item, 0)) for item in items])

' '.join 使新字符串形成字符串列表,其中列表元素由空格分隔。例如:

>>> ' '.join(['abc', 'xyz', 'uvw'])
'abc xyz uvw'

Python 字典的get() 方法如果键在其中则返回键的值,否则返回默认值。例如:

>>> d = {'a': 100, 'b': 200}
>>> d.get('a', 0)
100
>>> d.get('x', 0)
0

将此默认值设置为 0,为订单中未包含的项目提供零计数:

counter.get(item, 0))

最后,format() 方法有助于将计数值放入字符串中。例如:

>>> '{}: {}'.format('abc', 10)
'abc: 10'

关于python - Python 中的计数和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com