如何不添加重复的列表值,而是添加计数器来计数每个项目?


elif int(groceriesInput) in range(len(groceries)+1):
optionSelect = input("nAdd " + (groceries[int(groceriesInput)- 1][0]) + " to the cart? (y or n): ")
if optionSelect == "y" or optionSelect == "Y":
if groceries[int(groceriesInput)-1] in cart:
os.system('cls')
else:
os.system('cls')
cart.append(groceries[int(groceriesInput)- 1])

如何在每个项目之前添加计数器而不向列表中添加重复项目?

我的函数通过读取文件构建列表。

例如,这是我想要的输出:

2 milk

代替:

milk milk

[["鸡蛋",1.99],[‘牛奶’,3.59],["三文鱼",9.99],[‘面包’,3.25],[豆泡,2.99],[脂肪轮胎啤酒,8.99],[希腊酸奶,4.99],[椰菜,2.29],["西红柿",3.19],[‘苹果’,5.99],[‘鸡’,10.99],["芯片",3.69],[牛奶什锦早餐,4.99],["九命猫粮",6.39],[山羊奶酪,5.19],[帕玛森芝士,5.99],["黑比诺",18.5]]这是

列表

因此,对于列表中的每个条目,将其拆分为两个单词:name和price。因为我们只关心项目名称,所以我们将entry[0]中的值存储到item中,这基本上是某个项目的名称。现在,我们假设这是我们第一次遇到这个项目,所以我们设置isFirst等于True

现在,我们遍历存储在输出列表中的每个项目:out。由于out中的每个项目看起来像:COUNT NAME,我们将其拆分,并检查当前项目的名称是否在这个拆分的字符串中找到。如果是,则检索其计数的值并加1。

我们现在获得该项的索引,将count的自增值设置为它,将isFirst标志设置为False,因为我们不是第一次遇到该项,并跳出循环。

如果isFirst被设置为True,也就是说,这是我们第一次遇到这样的项目,我们只需将1 ITEM_NAME附加到输出列表中。

out = []
for entry in originalList:
item = entry[0]
isFirst = True
for s in out:
if item in s.split():
count = int(s.split()[0]) + 1
index = out.index(s)
out[index] = f"{count} {item}"
isFirst = False
break
if isFirst:
out.append(f"1 {item}")

对代码的其他改进:

尝试使用f-string来表示格式化的字符串(那些需要变量值的字符串)。因此,您要求用户输入的那一行,您可以将其替换为:

optionSelect = input(f"nAdd {groceries[int(groceriesInput)- 1][0]} to the cart? (y or n):")

最新更新