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 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题