Pycharm(十二)列表练习题

发布于:2025-04-03 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、门和钥匙

        小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)

运行结果:


网站公告

今日签到

点亮在社区的每一天
去签到