我想用下面的一个或多个元组列表创建一个嵌套列表,并根据用户的喜好确定列表的顺序。
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化的方式来编写此代码?
任何提示或指导都值得赞赏。
答案 0 :(得分:1)
您应该将数据存储在字典中
然后通过键访问该词典
data = dict(
Fruits=[("Apples",2),("Oranges",3),("Pineapples",5)]
Clothes=[("Jeans",10),("Shirts",5),("Dresses",15)]
Pets=[("Dogs",3),("Cats",4),("Turtles",2)]
)
一旦将它放在字典中,就可以轻松地使用变量访问值
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]
答案 1 :(得分:0)
尝试此方法。
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"))