当前位置: 首页 > 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  #细节:删除元素后索引要-1i+=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.mrgr.cn/news/96844.html

相关文章:

  • 视图函数的应用
  • SuperMap GIS基础产品FAQ集锦(20250402)
  • .Net8项目使用docker、docker-compose部署步骤
  • 3、nFR52xx蓝牙学习(点亮第一个LED灯)
  • 巧用临时对象之五
  • element-ui自制树形穿梭框
  • C++ 编程指南33 - 使用模板来表达适用于多种参数类型的算法
  • 基于React + Antd + Java的OFD文件上传预览实现方案(OFD文件转图片)
  • 对象和面向对象三大特征:封装
  • 黑马 C++ 学习笔记
  • Android 10.0 通过广播控制systemui状态栏动态显示和隐藏功能实现
  • Java 递归全解析:从原理到优化的实战指南
  • 持续集成与Jenkins安装使用教程
  • 模拟集成电路设计与仿真 : Mismatch
  • cmake(11):list 选项 排序 SORT,定义宏 add_definitions,cmake 里预定义的 8 个宏
  • 二叉树 —— 数据结构基础刷题路程
  • Linux内核中ARP协议的实现与dev_addr字段的作用
  • 基于Python的医院信息管理系统的设计与实现
  • Windows家庭版如何开启Hyper-V与关闭Hyper-V
  • 山东大学《多核平台下的并行计算》实验笔记