面向科班的python自学教程(速刷牛客网基础103题)(3) 列表、元组拓展

本系列笔记用于非零基础的计算机科班同学快速掌握基本python。我建议科班同学不要听冗长的小白入门课,直接用做题和“抄题”的方式学习python,节省时间。在学过C/C++/java的基础上速成python。每道题我都会列出python的语法不同于C++/java的地方。建议看完笔记自己去原页面做一遍。

而且,力求在这个系列中规避“茴香豆的N种写法”,即题目用到什么写法就写什么,争取不拓展过多种炫技写法。目的也是立刻掌握,快速上手跑数据分析和机器学习,而不是八股文的学法。我相信复杂的用法自会在更高难度题目中出现,水平到了,那时候学也不迟。

也适用于想用python刷题的同学,以后会逐渐更新python刷题笔记和项目笔记。
 


五、列表

16.发送offer

发送offer_牛客题霸_牛客网 (nowcoder.com)

描述

某公司在面试结束后,创建了一个依次包含字符串 'Allen' 和 'Tom' 的列表offer_list,作为通过面试的名单。

请你依次对列表中的名字发送类似 'Allen, you have passed our interview and will soon become a member of our company.' 的句子。

但由于Tom有了其他的选择,没有确认这个offer,HR选择了正好能够确认这个offer的Andy,所以请把列表offer_list中 'Tom' 的名字换成 'Andy' ,

再依次发送类似 'Andy, welcome to join us!' 的句子。

输入描述:

输出描述:

按题目描述进行输出即可。Allen, you have passed our interview and will soon become a member of our company.

Tom, you have passed our interview and will soon become a member of our company.Allen, welcome to join us!

Andy, welcome to join us!

答案:

offer_list = ["Allen", "Tom"]
for element in offer_list:
    print(
        element
        + ", you have passed our interview and will soon become a member of our company."
    )
offer_list.remove("Tom")
offer_list.append("Andy")
for element in offer_list:
    print(
        element
        + ", welcome to join us!"
    )

知识点:

1)列表中在末尾添加和删除元素分别用offer_list.remove()和offer_list.append()方法,括号里面是要操作的列表元素。

2)循环输出,和java里用for循环输出数组一个原理。

18.生成数字列表

生成数字列表_牛客题霸_牛客网 (nowcoder.com)

描述

牛牛在牛客网系统录入了一连串数字,数字之间依靠逗号隔开,你能帮助他将这些数字存储在列表中吗,列表元素以int的形式。

输入描述:

输入一行整数,数字之间以空格间隔。

输出描述:

输出这些数字组成的完整列表。

答案:

num = input()
num_list = num.split()
num_list = [int(element) for element in num_list]
print(num_list)

知识点:

1)列表推导式:[expression for item in iterable],其中 expression 是对每个元素的操作,item 是迭代的变量,iterable 是可迭代对象。这么看太抽象,我们直接用实例学习:

string_list = ["1", "2", "3", "4", "5"]

integer_list = [int(num) for num in string_list]

列表相当于数组或者集合,初始化的方法如图,注意是中括号[]。for前面的是对列表元素的操作。for和in之间的是你对列表中元素的一种代称,你可以随意起名字。in后面的是列表的名字。

这个语句的意思就是:string_list列表中每一个元素都被int()转化成int类型的元素,然后由integer_list这个列表来承接结果。

ps:注意列表推导式要在[]里写好

2)记得input默认返回str类型,分隔以后也是str元素,所以要类型转换为int类型

19.列表的长度

列表的长度_牛客题霸_牛客网 (nowcoder.com)

描述

牛牛学会了使用list函数与split函数将输入的连续字符串封装成列表,你能够帮他使用len函数统计一些公输入了多少字符串,列表中有多少元素吗?

输入描述:

输入一行多个字符串,字符串之间通过空格间隔。

输出描述:

输出列表的长度。

答案:

str = input()
str_list = str.split()
print(len(str_list))

知识点:

1)之前用len()函数获得过字符串的长度,从这道题中我们可以知道列表的长度也可以用len()求得

20.增加派对名单(一)

增加派对名单(一)_牛客题霸_牛客网 (nowcoder.com)

描述

为庆祝驼瑞驰在牛爱网找到合适的对象,驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单,在检查的时候发现少了他最好的朋友“Allen”的名字,你能使用append函数将这个名字加到列表末尾吗?添加完成请输出完整列表。

输入描述:

输入多个连续的字符串表示名字,以空格间隔。

输出描述:

输出添加完Allen后的完整列表。

答案:

str = input()
name_list = str.split()
name_list.append("Allen")
print(name_list)

知识点:

1)还是append方法,没有新的知识

21.增加派对名单(二)

增加派对名单(二)_牛客题霸_牛客网 (nowcoder.com)

描述

为庆祝驼瑞驰在牛爱网找到合适的对象,驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单,在检查的时候发现少了他最好的朋友“Allen”的名字,因为是最好的朋友,他想让这个名字出现在邀请列表的最前面,你能用insert函数帮他实现吗?请输出插入后的完整列表。

输入描述:

输入多个连续的字符串表示名字,用空格间隔。

输出描述:

输出插入名字后的完整列表。

答案:

str = input()
name_list = str.split()
name_list.insert(0,"Allen")
print(name_list)

知识点:

1)列表中插入:insert 方法接受两个参数,第一个是要插入的位置的索引,第二个是要插入的元素。列表的索引是从 0 开始的,所以插入到索引为 2 的位置实际上是在第三个位置插入元素。

my_list = [1, 2, 3, 4, 5]

在索引为 2 的位置插入元素 10

my_list.insert(2, 10)

print(my_list)

22.删除简历

删除简历_牛客题霸_牛客网 (nowcoder.com)

描述

牛牛在各大互联网公司投入了简历,公司的名字通过字符串的形式在一行中输入,请用列表记录。现在牛牛已经确定了第一所公司的HR表露了不录用他的态度,请你使用del函数帮助牛牛从列表中删除第一个元素,然后输出列表。

输入描述:

以字符串的形式输入公司名字,字符串之间以空格间隔。

输出描述:

输出删除第一个元素后的完整列表。

答案:

str = input()
company_list = str.split()
del company_list[0]
print(company_list)

知识点:

1)del 是一个用于删除列表中元素的关键字。

del 关键字可以用于删除列表中指定位置的元素,也可以用于删除整个列表。

2)删除列表 del company_list

23.删除好友

删除好友_牛客题霸_牛客网 (nowcoder.com)

描述

牛妹有一个坏习惯,一旦与朋友吵架了,她就要删除好友。现在输入一个行多个字符串表示牛妹的朋友,请把它们封装成列表,然后再输入与牛妹吵架的朋友的名字,请使用remove函数帮她从列表中删除这个好友,然后输出完整列表。

输入描述:

第一行输入多个字符串表示朋友的名字,以空格间隔。

第二行输入吵架的朋友的名字,必定是第一行中出现的名字。

输出描述:

输出删除好友后的完整列表。

答案:

str = input()
target = input()#要被删除的人名
str_list = str.split()
for element in str_list:
    if (element == target):
        str_list.remove(element)
print(str_list)

知识点:

1)选择语句:

1.if-else格式:

is_happy = int(input("对象的心情指数是:"))
if is_happy > 80:
    print("ok")
else:
    print("not OK")

如果中间的语句没有缩进,会被当成循环已经结束了。退出循环。什么条件下都会输出了。

else也是不可以独立于if存在的。

2.嵌套条件语句

嵌套判断:if套if

多条件判断:

类比elseif的elif

24.淘汰最末尾的学生

淘汰排名最后的学生_牛客题霸_牛客网 (nowcoder.com)

描述

某实验班实行末位淘汰制,期中考试需要淘汰末三位同学。现输入一行多个字符串表示按分数排名的该班级同学的名字(数量一定不少于三个),请你使用list将其封装为列表,然后使用三次pop函数,去掉末三位同学的名字,最后输出淘汰后的班级名字列表。

输入描述:

输入一行多个字符串表示同学名字,最少不少于3个名字,以空格间隔。

输出描述:

输出删除末三位后的完整列表。

答案:

name = input()
name_list = name.split()
count = 0
while count < 3:
    name_list.pop()
    count += 1
print(name_list)

知识点:

1)循环语句:条件外围不用加括号,也是用缩进和冒号区分循环体

2)不能用count++这种写法,只有count += 1

3)pop():列表对象的方法,括号里可加入指定的索引,就是删除指定位置的元素。如果不写索引,就是删除最后一个元素。

25.有序的列表

有序的列表_牛客题霸_牛客网 (nowcoder.com)

描述

创建一个依次包含字符串'P'、'y'、't'、'h'、'o'和'n'的列表my_list,先使用sorted函数对列表my_list进行临时排序,第一行输出排序后的完整列表,第二行输出原始的列表。再使用sort函数对列表my_list进行降序排序,第三行输出排序后完整的列表。

输入描述:

输出描述:

第一行输出临时排序后的列表;

第二行输出原始的列表;

第三行输出完成降序排序后的列表。

答案:

my_list = ['P','y','t','h','o','n']
new_list = sorted(my_list)
descend_list = sorted(my_list,reverse = True)
print(new_list)
print(my_list)
print(descend_list)

知识点:

1)sorted函数:参数可以是列表,默认升序排序

2)列表赋值不用使用循环挨个换,直接赋值就可以

3)需要降序排列的时候加一个参数reverse令其为True

26.反转列表

牛牛的反转列表_牛客题霸_牛客网 (nowcoder.com)

描述

牛牛有一个列表记录了各个朋友的喜欢的数字,num = [3, 5, 9, 0, 1, 9, 0, 3],请你帮他创建列表,然后使用reverse函数将列表反转输出。

输入描述:

输出描述:

输出反转后的列表。

答案:

num_list = [3, 5, 9, 0, 1, 9, 0, 3]
num_list.reverse()
print(num_list)

知识点:

1)reverse是num.list的一个方法。调用 reverse 方法会修改原始列表,而不是创建一个新的反转后的列表。

27.朋友们的喜好

朋友们的喜好_牛客题霸_牛客网 (nowcoder.com)

描述

牛牛有一个name = ['Niumei', 'YOLO', 'Niu Ke Le', 'Mona'] 记录了他最好的朋友们的名字,请创建一个二维列表friends,使用append函数将name添加到friends的第一行。

假如Niumei最喜欢吃pizza,最喜欢数字3,YOLO最喜欢吃fish, 最喜欢数字6,Niu Ke Le最喜欢吃potato,最喜欢数字0,Mona最喜欢吃beef,最喜欢数字3。

请再次创建一个列表food依次记录朋友们最喜欢吃的食物,并将创建好的列表使用append函数添加到friends的第二行;

然后再创建一个列表number依次记录朋友们最喜欢的颜色,并将创建好的列表使用append函数添加到friends的第三行。

这样friends就是一个二维list,使用print函数直接打印这个二维list。

输入描述:

输出描述:

[['Niumei', 'YOLO', 'Niu Ke Le', 'Mona'], ['pizza', 'fish', 'potato', 'beef'], [3, 6, 0, 3]]

答案:

name = ['Niumei', 'YOLO', 'Niu Ke Le', 'Mona']
friends = []
friends.append(name)
food = ['pizza', 'fish', 'potato', 'beef']
friends.append(food)
number = [3, 6, 0, 3]
friends.append(number)
print(friends)

知识点:

1)在 Python 中,matrix = [] 这样的语句创建的是一个空列表,但是它并不直接表明这是一个二维列表。在这个时候,解释器只知道这是一个空的列表。

当你通过 matrix.append([1, 2, 3]) 这样的语句向 matrix 中添加了一个包含三个元素的列表时,解释器就开始明白你可能在构建一个二维列表。随着你不断添加新的列表,解释器逐渐理解你的意图,即你正在创建一个二维列表。

2)所以列表中的append方法非常灵活,既可以加入元素,也可以加入一整个列表作为高维列表的行。

28.密码游戏

密码游戏_牛客题霸_牛客网 (nowcoder.com)

描述

牛牛和牛妹一起玩密码游戏,牛牛作为发送方会发送一个4位数的整数给牛妹,牛妹接收后将对密码进行破解。

破解方案如下:每位数字都要加上3再除以9的余数代替该位数字,然后将第1位和第3位数字交换,第2位和第4位数字交换。

请输出牛妹破解后的密码。

输入描述:

输入一个四位数的整数。

输出描述:

输出破解后的密码,以四位数的形式。

答案:

num = int(input())
first = num // 1000
second = num // 100 % 10
third = num // 10 % 10
fourth = num % 10
num_list = [first,second,third,fourth]
num_list = [(element + 3) % 9 for element in num_list]
num_list[0], num_list[2] = num_list[2], num_list[0]#将元组num_list[2], num_list[0]的值赋给
num_list[1], num_list[3] = num_list[3], num_list[1]
#这里第一次写成了print(num_list[0],num_list[1],num_list[2],num_list[3]),忘记了这样的输出会有空格
print(*num_list, sep = "")#*将列表 my_list 中的元素解包,相当于print(1, 2, 3, 4)。这使得 print 函数接收到多个参数,每个参数对应于列表中的一个元素。

知识点:

1)即使num已经是int类型,但是用“/”仍会出现浮点类型的结果。“//”是整数除法运算符。

2)元组:

不可变性:

元组是不可变的,即一旦创建后,其内容不可更改。这与列表(List)的可变性形成对比。不可变性使得元组更适合用于表示不应被修改的数据集合,例如表示日期、坐标、配置项等。

性能:

由于元组是不可变的,其内部的结构可以更加简单,因此在某些情况下,元组的性能可能比列表更好。对于小型数据集合,元组的创建和操作可能比列表更快。

多个返回值:

函数可以返回多个值,而这些值可以被封装为一个元组。调用函数后,可以通过解构元组的方式轻松获取多个返回值。

#创建一个包含两个元素的元组,表示坐标 (x, y)

coordinates = (3, 7)#注意括号是小括号

#访问元组中的元素

x = coordinates[0]#也可以用索引访问

y = coordinates[1]

print("x 坐标:", x)

print("y 坐标:", y)

3)解构:(或称为解包)是一种从数据结构中提取元素并将其分配给变量的操作。在 Python 中,最常见的使用解构的场景之一是使用元组或列表的解构。

#创建一个元组

coordinates = (3, 7)

#元组解构

x, y = coordinates

#这样x,y分别有了元组的值,3和7

4)注意输出。你当然可以将所得列表的数乘自己的位数加在一起。但是如果不想这么算的话,还有一种利用sep的办法使消除数字间的空格。

直接print(num_list)结果是[1,2,3,4],print(*num_list)结果是1 2 3 4,后面的sep是 print 函数的一个参数,用于指定在打印多个值时的分隔符,默认是空格。我们使sep为空值,就可以输出紧凑的结果。

29.用列表实现栈

用列表实现栈_牛客题霸_牛客网 (nowcoder.com)

描述

栈是一种先进后出的数据结构,类似我们生活中挤电梯,最后进入的肯定是先出来,现我们用Python的列表来模拟栈。假设初始的列表为 stack = [1, 2, 3, 4, 5],请将其视作栈,使用pop函数弹出末尾两个元素,再使用append函数将输入元素加入到栈中,每次操作完成后都要输出整个列表。

输入描述:

输入要加入栈中的整数。

输出描述:

第一行输出第一次出栈后的列表;

第二行输出第二次出栈后的列表;

第三行输出元素入栈后的列表。

答案:

num = int(input())
stack = [1, 2, 3, 4, 5]
stack.pop()
print(stack)
stack.pop()
print(stack)
stack.append(num)
print(stack)

知识点:

1)简单的pop和append的应用,注意别写成push了

30.用列表实现队列

用列表实现队列_牛客题霸_牛客网 (nowcoder.com)

描述

队列是一种先进先出的数据结构,类似食堂排队打饭,先入队的元素当然要先出队,先请用Python列表模拟队列。现有一列表 queue = [1, 2, 3, 4, 5] 被视作队列,请使用pop函数连续两次取出队首元素,再使用append函数将输入元素添加到队尾,每次操作后都要输出完整的列表。

输入描述:

输入一个整数表示要添加到队列的元素。

输出描述:

第一行输出第一次取出队首后的列表;

第二行输出第二次取出队首后的列表;

第三行输出添加元素到队列后的列表。

答案:

num = int(input())
queue = [1, 2, 3, 4, 5]
queue.pop(0)
print(queue)
queue.pop(0)
print(queue)
queue.append(num)
print(queue)

知识点:

1)按描述里操作,即可模拟队列

31.团队分组

团队分组_牛客题霸_牛客网 (nowcoder.com)

描述

创建一个列表group_list,其中依次包含字符串 'Tom', 'Allen', 'Jane', 'William', 'Tony' 表示这个小组成员的名字。现有三项任务需要他们去完成,根据不同任务的繁琐度和实际情况需要分别派2人、3人、2人来完成,他们决定通过对列表分片来分配任务。

使用print()语句和切片来打印列表group_list

的前两个元素表示去做第一个任务的人的名字,再使用print()语句和切片来打印列表group_list的中间三个元素表示去做第二个任务的人的名字,再使用print()语句和切片来打印列表group_list的后两个元素表示去做第三个任务的人的名字。

输入描述:

输出描述:

按照题意输出

['Tom', 'Allen']['Allen', 'Jane', 'William']

['William', 'Tony']

答案:

group_list = ['Tom', 'Allen', 'Jane', 'William', 'Tony']
print(group_list[0:2])
print(group_list[1:4])
print(group_list[3:5])

知识点:

1)考察切片,注意切片的索引范围,左闭右开

猜你喜欢

转载自blog.csdn.net/qq_53077632/article/details/134900253