当前位置: 首页 > news >正文

Pycharm(十二)列表练习题

一、门和钥匙

        小X在一片大陆上探险,有一天他发现了一个洞穴,洞穴里面有n道门, 打开每道门都需要对应的钥匙,编号为i的钥匙能用于打开第i道门, 而且只有在打开了第i(i>1)道门之后,才能打开第i+1道门, 一开始只能打开第1道门。幸运的是,小X在外面探索的途中, 每天都能发现一把能打开这n道门中其中一道门的钥匙,每天找完钥匙后他都会去打开所有能打开的门。 现在给出他每天找到的钥匙编号,请问每道门分别在哪一天被打开。
输入示例:
请输入门的数量: 6
请输入每天找到的钥匙 5 6 1 3 2 4
输出示例:
[3,5,5,6,6,6]
代码:
n=eval(input('请输入门的数量:'))
key_list=[]
solve_list=[]
max_day=1
for i in range(1,n+1):
    key_num=eval(input(f'请输入第{i}天找到的钥匙:'))
    key_list.append(key_num)
for i in range(1,n+1):#遍历天数
    for j in range(len(key_list)):#遍历钥匙
        if i==key_list[j]:
            max_day=max(max_day,j+1)
            solve_list.append(max_day)
            break
print(f'每道门分别在{solve_list}打开')

二、删除列表中的指定元素

需求: 键盘录入一个字符串,并添加到列表中,输入end结束录入,然后删除列表中所有的cc字符串, 然后按照字典序对其元素进行升序排列。

给出4种解法:

方式一:根据索引删除,正向遍历

细节:正向删除元素之后,索引-1

print('方式1.根据索引删除,正向遍历:')
print('-'*30)
word_list=['bb','aa','cc','cc','cc','','dd','cc']
print(f'删除前的结果:{word_list}')
i=0
while i<len(word_list):
    if word_list[i]=='cc':
        # del word_list[i]
        word_list.pop(i)
        i-=1  #细节:删除元素后索引要-1
    i+=1
word_list.sort()
print(f'删除后的结果:{word_list}')
print('*'*30)

方式二:根据索引删除,逆向遍历,逆向遍历不会改变前一个元素的索引,只需要正常遍历一遍即可。

代码:

#方式2.根据索引删除,逆向遍历
print('方式2.根据索引删除,逆向遍历:')
word_list=['bb','aa','cc','cc','cc','','dd','cc']
print(f'删除前的结果:{word_list}')
n=len(word_list)-1
while n>=0:
    if word_list[n]=='cc':
        word_list.pop(n)
    n-=1 #不会影响前边元素的索引
word_list.sort()
print(f'删除后的结果:{word_list}')
print('*'*30)

方式3:列表解析式

#方式3.列表推导式
print('方式3.列表推导式:')
word_list=['bb','aa','cc','cc','cc','','dd','cc']
print(f'删除前的结果:{word_list}')
word_list=[i for i in word_list if i!='cc']
#3.打印结果
word_list.sort()
print(f'删除后的结果:{word_list}')
print('*'*30)

方式4:filter过滤器+匿名函数

#方式4:filter(过滤规则,要操作的容器对象)函数
print('方式4.过滤器:')
word_list=['bb','aa','cc','cc','cc','','dd','cc']
word_list=list(filter(lambda word:word!='cc',word_list))
word_list.sort()
print(f'删除后的结果:{word_list}')

运行结果如下:

三、约瑟夫环

#约瑟夫环
#1.提示用户录入游戏人数
n=eval(input('请输入游戏人数:'))
#2.生成初始列表
lst=[i for i in range(1,n+1)]
i=0
while len(lst)!=1:
    i=(i+2)%len(lst)
    lst.pop(i)
print(lst)

四、列表元素去重

需求:去掉列表中的重复元素,只保留一个值。

思路1:列表->集合->列表

代码:

#方式1.
list1=['aa','bb','cc','aa','cc','bb','bb']
set1=set(list1)
list2=list(set1)
#打印去重后的结果
print(list2)

思路2.定义一个空列表用于保留list1中唯一的元素值,not in

#方式2.not in
lst2=[]
for k in list1:
    if k not in lst2:
        lst2.append(k)
print(lst2)

运行结果:

http://www.dtcms.com/a/108079.html

相关文章:

  • mac环境中Nginx安装使用 反向代理
  • 通俗解释 TCP 的三次握手、四次挥手
  • 《深度探索:数据库树形数据遍历与节点更新的游标之道》
  • 在PyTorch中使用GPU加速:从基础操作到模型部署
  • React-01React创建第一个项目(npm install -g create-react-app)
  • 【扣子agent入门】搭建计算热量工作流
  • 【QT】构建项目
  • DIY搭建网站(学术个人介绍主页)
  • 2025年大模型与Transformer架构:重塑AI未来的科技革命
  • docker的入门以及使用
  • unity运行中场景指定模型回放功能(模型是地形并且可以加载预制体进行回放)
  • Java面试黄金宝典30
  • 无需安装Office进行 Word、Excel操作的微软开发库
  • MySQL 锁机制:数据库的交通管制系统
  • 2023年12月电子学会青少年软件编程图形化三级考级真题—打砖块游戏
  • 用Rust和WebAssembly打造轻量级前端加密工具
  • RNN模型与NLP应用——(7/9)机器翻译与Seq2Seq模型
  • SOME/IP-SD -- 协议英文原文讲解9(ERROR处理)
  • GitHub二次验证登录2FA(Enable two-factor authentication )
  • 手搓多模态-01 对比损失的优化
  • python网络爬虫开发实战之数据的存储
  • spring-security原理与应用系列:HttpSecurity.filters
  • 【算法中的数学】欧拉筛埃氏筛
  • 游戏引擎学习第194天
  • SpringBoot+Vue 中 WebSocket 的使用
  • LLM大模型教程——什么是AI大模型
  • 企业linux常用服务搭建
  • 数据结构每日一题day10(链表)★★★★★
  • Ansible(3)——主机清单与配置文件
  • 【高项】信息系统项目管理师(十四)配置与变更管理【3分】