You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让嵌套for循环按顺序迭代列表所有元素?附尝试代码

解决for循环按顺序迭代列表元素的问题

你的代码存在两个核心问题:

  1. 内层for description in food_desc: continue循环完全无效,它遍历所有描述但直接跳过,最终description变量只会保留列表最后一个元素,导致所有披萨都打印同一个描述。
  2. 虽然Python 3.7及以上的普通字典会保留插入顺序,但你的描述列表food_desc和披萨条目是分开维护的,容易出现对应关系混乱。

下面给出两种可行的修改方案:

方案一:整合数据结构(推荐)

把披萨的描述直接整合到menu字典中,让每个披萨的信息(编码、名称、价格、描述)一一对应,避免顺序错乱:

menu = {
    "Pizzas": [
        {"code": "Hc", "name": "Ham & Cheese", "price": 5.00, "desc": "Marinara tomato sauce"},
        {"code": "Cg", "name": "Cheesy Garlic", "price": 5.00, "desc": "Served with garlicky aioli"},
        {"code": "H", "name": "Hawaiian", "price": 5.00, "desc": "Juicy pineapple"},
        {"code": "Cc", "name": "Classic Cheese", "price": 5.00, "desc": "Loaded with mozzarella cheese"},
        {"code": "Cv", "name": "Classic Veggie", "price": 5.00, "desc": "Stretchy, gooey sauce."},
        {"code": "M", "name": "Margherita", "price": 8.50, "desc": "Freshly chopped tomatoes"},
        {"code": "Hs", "name": "Hot & Spicy Veggie", "price": 8.50, "desc": "Our explosive combination of jalapenos"},
        {"code": "P", "name": "Pepperoni", "price": 8.50, "desc": "Meltingly delicious mozzarella"},
        {"code": "Ml", "name": "Meat Lovers", "price": 8.50, "desc": "With a variety of meats"},
        {"code": "Bc", "name": "Buffalo Chicken", "price": 8.50, "desc": "Loaded with our "},
        {"code": "Cs", "name": "Chicken Supreme", "price": 8.50, "desc": "Over juicy chicken breast"},
        {"code": "Bb", "name": "Beyond Beef", "price": 8.50, "desc": "Covered with loads"},
    ],
    "Sides": {("Cf", "Crinkle-Cut Fries"): 5.50, ("Gb", "Garlic Bread"): 4.49, ("Ct", "Chicken Tenders"): 8.99},
    "Drinks": {("Co", "Coca Cola (1.5L)"): 4.79, ("S", "Sprite (1.5L)"): 4.79, ("P", "Pump (750ml)"): 3.50, ("Ko", "Keri Orange Juice (350ml)"): 2.99}
}

def show_menu():
    print("Menu:\n".center(60))
    print("Pizzas \n")
    # 直接按列表顺序迭代每个披萨条目
    for pizza in menu["Pizzas"]:
        print(f"   • {pizza['name']:<30} ({pizza['code']})       ${pizza['price']:.2f}")
        print(f"{pizza['desc']} \n")

show_menu()

方案二:通过索引关联现有数据

如果不想修改原有的menu结构,可以用enumerate获取披萨的迭代索引,以此对应food_desc中的描述:

menu = {"Pizzas" : {("Hc", "Ham & Cheese") : 5, ("Cg", "Cheesy Garlic") : 5, ("H", "Hawaiian") : 5, ("Cc", "Classic Cheese") : 5, ("Cv", "Classic Veggie") : 5, 
        ("M", "Margherita") : 8.50,("Hs", "Hot & Spicy Veggie") : 8.50, ("P", "Pepperoni") : 8.50, ("Ml", "Meat Lovers") : 8.50, 
        ("Bc","Buffalo Chicken") : 8.50, ("Cs", "Chicken Supreme") : 8.50,("Bb", "Beyond Beef") : 8.50},
        "Sides" : {("Cf", "Crinkle-Cut Fries") : 5.50,("Gb","Garlic Bread") : 4.49, ("Ct", "Chicken Tenders") : 8.99}, 
        "Drinks" : {("Co", "Coca Cola (1.5L)") : 4.79, ("S", "Sprite (1.5L)") : 4.79,("P", "Pump (750ml)") : 3.50, ("Ko", "Keri Orange Juice (350ml)") : 2.99}}

food_desc = ["Marinara tomato sauce", "Served with garlicky aioli", "Loaded with mozzarella cheese", "Stretchy, gooey sauce.",
             "Juicy pineapple", "Freshly chopped tomatoes", "Our explosive combination of jalapenos", "Meltingly delicious mozzarella", 
             "With a variety of meats", "Loaded with our ", "Over juicy chicken breast", "Covered with loads", 
             "Perfectly seasoned", "Fresh from the oven", "Flavorful chicken wings"]

def show_menu():
    print("Menu:\n".center(60))
    print("Pizzas \n")
    # 用enumerate获取每个披萨的迭代索引,对应food_desc中的元素
    for idx, ((code, food), price) in enumerate(menu["Pizzas"].items()):
        print(f"   • {food:<30} ({code})       ${price:.2f}")
        # 根据索引取出对应描述
        print(f"{food_desc[idx]} \n")

show_menu()

注意:方案二依赖menu["Pizzas"]的插入顺序和food_desc的顺序完全一致,如果后续修改其中一方的顺序,必须同步调整另一方,否则会出现描述错配的问题。

内容的提问来源于stack exchange,提问作者GruffCheetah628

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:15:58