Syn_Wll 2022-02-13 22:34 采纳率: 80%
浏览 78
已结题

关于python中列表操作与for循环结合的问题

问题遇到的现象和发生背景

题目要求:
已知受邀请人名单如下:
names = ['li hua', 'zhao si', 'ma hu', 'liu wei', 'yu jin', 'fang hui', 'da yu', 'ma kai', 'hu jie']
请使用pop()不断地删除受邀请人名单,直到只有‘zhao si’和‘ma hu’两位为止,对于被删除的人请告诉他们下次一起共进晚餐,而对于zhao si和ma hu告诉他们仍在受邀请之列。

问题相关代码,请勿粘贴截图
names = ['li hua', 'zhao si', 'ma hu', 'liu wei', 'yu jin', 'fang hui', 'da yu', 'ma kai', 'hu jie']

for name in names:
    if name == 'zhao si':
        print(f"Dear {name}, you are still invited!")
    elif name == 'ma hu':
        print(f"Dear {name}, you are still invited!")
    else:
        uninvited_name = names.pop()
        print(f"Sorry {uninvited_name}, let's have dinner next time!")
        
# 为什么除了'zhao si'和'ma hu'还有其他人在名单之中?
print(names)

运行结果及报错内容
Sorry hu jie, let's have dinner next time!
Dear zhao si, you are still invited!
Dear ma hu, you are still invited!
Sorry ma kai, let's have dinner next time!
Sorry da yu, let's have dinner next time!
Sorry fang hui, let's have dinner next time!
['li hua', 'zhao si', 'ma hu', 'liu wei', 'yu jin']
我的解答思路和尝试过的方法

使用for循环遍历列表,如果名字是'zhao si'或者'ma hu'就输出一句话,其他的则删除列表并致歉。

我想要达到的结果

列表中只剩'zhao si'和'ma hu'

  • 写回答

3条回答 默认 最新

  • 关注

    对于一边循环一边删除的操作,可以用倒序循环。
    你题目的解答代码如下:

    names = ['li hua', 'zhao si', 'ma hu', 'liu wei', 'yu jin', 'fang hui', 'da yu', 'ma kai', 'hu jie']
    
    for i in range(len(names)-1,-1,-1):
        name = names[i]
        if name == 'zhao si':
            print(f"Dear {name}, you are still invited!")
        elif name == 'ma hu':
            print(f"Dear {name}, you are still invited!")
        else:
            uninvited_name = names.pop(i)
            print(f"Sorry {uninvited_name}, let's have dinner next time!")
    
    # 为什么除了'zhao si'和'ma hu'还有其他人在名单之中?
    print(names)
    

    img

    要正序循环可以这样

    names = ['li hua', 'zhao si', 'ma hu', 'liu wei', 'yu jin', 'fang hui', 'da yu', 'ma kai', 'hu jie']
    i = 0
    while i < len(names):
        name = names[i]
        if name == 'zhao si' or name == 'ma hu':
            print(f"Dear {name}, you are still invited!")
            i += 1
        else:
            uninvited_name = names.pop(i)
            print(f"Sorry {uninvited_name}, let's have dinner next time!")
    
    print(names)
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 创建了问题 2月13日

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端