当通过input()将值附加到列表时,我想防止附加相同的值

时间:2018-09-30 06:11:28

标签: python-3.x

import random

menu = []
input_menu = input("add your menu: ")
menu.append(input_menu)
while len(input_menu) > 0:
    input_menu = input('add more menu(if not, enter): ')
    menu.append(input_menu)
    print(menu)


print("Today's menu:", random.choice(menu))

我想避免输入相同的菜单,而是要显示一条消息-> print(“它已经在列表中”)

ex)当我输入“鸡”时,如果列表中已经有“鸡”,则显示消息并返回输入

,这是最短的代码吗?还是可以缩短此代码?

2 个答案:

答案 0 :(得分:0)

搜索列表中的项目是O(n)解决方案(请参见对问题的@Austin's评论)。相反,使用set会导致您失去输入菜单的顺序。第二个缺点是,您不能将set放入random.choice中,因为set不支持索引。

但是,您可以将菜单项与菜单列表结合使用,并检查新项是否在菜单项中,否则将其添加到列表和菜单项中。

那样您就可以

  • 按输入顺序排序的菜单项
  • 没有重复
  • O(1)查找

缺点:一组使用一些内存


import random

def PrettyPrintMenu(m):
    print("\nMenu", *m, sep="\n  - ")

menu = []

input_menu = input("add your menu: " )
menu.append(input_menu)
unique = {input_menu}    # set of menu items, we check it to avoid dupes
# PrettyPrintMenu(menu)  # uncomment to get a printout here as well

while True:
    input_menu = input('add more menu(if not, enter): ')

    if not input_menu:            # empty strings are Falsy
        break                         # leave while
    if input_menu in unique:
        print("\n'{}' is already on the menu.".format(input_menu))
    else:
        menu.append(input_menu)
        unique.add(input_menu)

    PrettyPrintMenu(menu)

print("\nToday`s menu:", random.choice(menu))

输出:

add your menu: soup

add more menu(if not, enter): eggs

Menu
  - soup
  - eggs
add more menu(if not, enter): chicken

Menu
  - soup
  - eggs
  - chicken 
add more menu(if not, enter): chicken

'chicken' is already on the menu.

Menu
  - soup
  - eggs
  - chicken 
add more menu(if not, enter): dessert

Menu
  - soup
  - eggs
  - chicken 
  - dessert
add more menu(if not, enter): 

Today`s menu: chicken

我利用print()

的选项为菜单添加了漂亮的打印机

答案 1 :(得分:-1)

您的实现不是您想要的输出的正确实现。我修改并修复了您的代码:

import random
menu = []
while True:
    input_menu = input("add your menu(if you are done, press enter):")
    menu.append(input_menu)
    if len(menu) != len(set(menu)):
        menu = list(set(menu))
        print("It's already in the list. Please try again.")
    elif len(input_menu) == 0:
        break
print("Today's menu:", random.choice(menu))

希望它会有所帮助:)