如何控制列表中的重复值的数量

时间:2017-09-25 06:48:28

标签: python

我需要一个条件或if语句,以确保用户输入只能在列表中输入每种类型项目最多5个。例如,我们假设有一个菜单,您可以选择要购买的商品,但您可以同时购买同一类型商品的最高限额为5。 我只能买5个芒果冰沙而不是6个。 但我也可以买5芒果冰沙和1草莓冰沙 我想说的是5不是您可以购买的最大商品数量,而是您可以购买的相同类型商品的最大数量。我需要这个条件来确保用户输入的第6个重复项目不会附加到我的列表中。

#This is what my list should allow
my_list = [["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Strawberry", 2.00]]

#This is what my list shouldn't allow 
my_list = [["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Strawberry", 2.00]]

2 个答案:

答案 0 :(得分:0)

我同意@Martijn Pieters的评论。 但如果你有任何理由以你的方式做到这一点,这是我的解决方案:

my_list = [["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Strawberry", 2.00]]
product_cache = {}
for obj in my_list:
    if obj[0] in product_cache:
        product_cache[obj[0]]+=1
        if product_cache[obj[0]] > 5:
            print( str(obj[0]) + ' over 5')
            #do something
    else:
        product_cache[obj[0]] = 1

和“product_cache”将是dict @Martijn Pieters说的

product_cache = {'Strawberry': 1 , 'Mango': 5}

答案 1 :(得分:0)

您可以使用Counter计算每件商品的出现次数,并检查每件商品的出现次数是否超过5次:

>>> from collections import Counter
>>> my_list = [["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Mango", 2.00], ["Strawberry", 2.00]]
>>> Counter(item for item,_ in my_list)
Counter({'Mango': 5, 'Strawberry': 1})
>>> Counter(item for item,_ in my_list).values()
dict_values([5, 1])
>>> max(Counter(item for item,_ in my_list).values())
5
>>> max(Counter(item for item,_ in my_list).values()) <= 5
True