用条件语句编译嵌套列表

2024-05-19 10:54:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个嵌套列表,其中包含以下一个或多个元组列表,列表的顺序取决于用户的偏好

Fruits=[("Apples",2),("Oranges",3),("Pineapples",5)]
Clothes=[("Jeans",10),("Shirts",5),("Dresses",15)]
Pets=[("Dogs",3),("Cats",4),("Turtles",2)]

嵌套列表的顺序将取决于用户的偏好。例如,如果用户更喜欢宠物而不是衣服而不是水果。列表如下所示:

[[("Jeans",10),("Shirts",5),("Dresses",15)],[("Jeans",10),("Shirts",5), 
("Dresses",15)],[("Apples",2),("Oranges",3),("Pineapples",5)]]

用户还可以选择只挑选一个或两个项目。例如,如果用户只关心宠物,然后是衣服(不关心水果),他/她的列表将如下所示

[[("Dogs",3),("Cats",4),("Turtles",2)],[("Jeans",10),("Shirts",5), 
("Dresses",15)]]

用户输入是一个按顺序列出首选项的列表。例如:

preference= ["Pets", "Fruits", "Clothing"] # preference list for users who care about pets over fruits over clothing.
            or 
preference= ["Fruits", "Clothing"] # preference list for users who care about fruits over clothing (no regard for pets)

我就是这样试图解决这个问题的。首先,我创建一个空列表,其中包含相应数量的嵌套列表:

empty_list=[[] for x in range (len(preferences)]

这将为我需要的嵌套列表的数量创建一个占位符。然后,我运行一组条件语句,每次弹出一个列表:

if preference[0]=="Fruits":
    empty_list[0]=Fruits
    if preference[1]=="Clothes":
        empty_list[1]=Clothes
        empty_list[2]=Pets
   elif preference[1]=="Pets":
        empty_list[1]=Pets
        empty_list[2]=Clothes

if preference[0]=="Pets":
    empty_list[0]=Pets
    if preference[1]=="Clothes":
        empty_list[1]=Clothes
        empty_list[2]=Fruits
    elif preference[1]=="Fruits":
        empty_list[1]=Fruits
        empty_list[2]=Clothes

if preference[0]=="Clothes":
    empty_list[0]=Clothes
    if preference[1]=="Pets":
        empty_list[1]=Pets
        empty_list[2]=Fruits
    elif preference[1]=="Fruits":
        empty_list[1]=Fruits
        empty_list[2]=Pets

我的解决方案效率低下,而且如果只有两个首选项而不是三个首选项,还会导致列表分配超出范围的问题。有没有更像Python的写作方式

任何提示或指导都将不胜感激


Tags: 用户列表forif顺序listempty首选项
2条回答

试试这个方法

def prefer(preference):
    preference_list = []

    choices = {
        "fruits": [
            ("Apples", 2),
            ("Oranges", 3),
            ("Pineapples", 5)
        ],
        "cloths": [
            ("Jeans", 10),
            ("Shirts", 5),
            ("Dresses", 15)
        ],
        "pets": [
            ("Dogs", 3),
            ("Cats", 4),
            ("Turtles", 2)
        ]
    }

    for choice in choices:
        if choice in preference:
            preference_list.insert(preference.index(choice), choices[choice])

        else:
            preference_list.append(choices[choice])


    print(preference_list)

prefer(("fruits", "cloths"))

你应该把数据存储在字典里

然后通过键访问字典

data = dict(
    Fruits=[("Apples",2),("Oranges",3),("Pineapples",5)]
    Clothes=[("Jeans",10),("Shirts",5),("Dresses",15)]
    Pets=[("Dogs",3),("Cats",4),("Turtles",2)]
)

一旦在dict中有了它,就可以很容易地用变量访问这些值

fruits = "Fruits"
my_fruits = data[fruits]

然后你可以使用一个简单的列表理解来捕获你所有的兴趣

interests = ["Fruits","Pets"]    
interesting_things = [data[interest] for interest in interests]

interests = ["Fruits","Clothes"]
interesting_things = [data[interest] for interest in interests]

相关问题 更多 >

    热门问题