12,python实战(一)

100 阅读5分钟

一, 准备基础

学完python学习系列-培训课的深&浅拷贝之后可做

二, 题目

问题1:lst1 = [1, 3, 2, 6, 1, 1, 4],程序实现:求lst1最后一个元素1的索引

问题2:lst1 = [1, 3, 2, 6, 4],程序实现:删除lst1元素中的中位数

问题3:lst1 = [1, 3, 2, 6, 4],程序实现:删除lst1元素中的最大值和最小值

问题4:lst1 = [1, 3, 2, 6, 4],程序实现:删除反向后的lst1中索引为3的元素,并输出该元素

问题5:lst1 = [1, 2, 3] lst2 = [4, 5, 6],程序实现:把lst2中元素加到lst1中,并对lst1进行降序排列

问题6:实现用户输入一串小写的英文字母,输出其中英文字母有几种;例如输入abcd,输出8

问题7: 有如下两个列表: lst1 = [1, 2, 3, 2, 5, 1, 2] lst2 = [2, 7, 9, 5]

编程实现:

  • 求哪些整数既在lst1中,也在lst2中
  • 求哪些整数在lst1中,不在lst2中
  • 求两个列表一共有哪些整数

三,解析及源代码

1,问题1:

lst1 = [1, 3, 2, 6, 1, 1, 4],程序实现:求lst1最后一个元素1的索引

分析

1,分解问题,分析实现步骤:先找到lst1最后一个元素1,再找到它的索引;

2,找lst1最后一个元素1:在查找类对象方法里面去找,找到对象方法list.index是可以适用的,该对象方法定义如下

list.index方法

3,对照可以看出x给1;尝试着start给-1,end给0后发现不行,此方法只能支持正向查找

4,那就把lst1先给反向(使用list.reverse),然后再查出此时的索引,再+1取反即可

image.png

代码如下

lst1 = [1, 3, 2, 6, 1, 1, 4]
lst1.reverse()
print(-(lst1.index(1,0,-1)+1))

输出

-2

2, 问题2:

lst1 = [1, 3, 2, 6, 4],程序实现:已知lst1元素为5且元素不重复,删除lst1元素中的中位数

分析

1,分解问题,分析实现步骤:先求出中位数,再从列表中删除掉值和它一样的

2,找中位数:先复制一个到lst2,将lst2使用list.sort()升序排列,索引为2的即为中位数

image.png

3,删除:使用list.remove()

image.png

代码如下

lst1 = [1, 3, 2, 6, 4]
lst2 = lst1.copy()
lst2.sort()
a = lst2[2]
lst1.remove(a)
print(lst1)

输出为

[1, 2, 6, 4]

3,问题3:

lst1 = [1, 3, 2, 6, 4],程序实现:删除lst1元素中的最大值和最小值

分析

1,分解问题,分析实现步骤:找到最大值和最小值,然后再删除

2,找到最大值和最小值:先复制一个到lst2,将lst2按升序排列,找到lst2的头尾两个元素值

3,从lst1中删除:使用list.remove()删除这最大值和最小值

代码如下

lst1 = [1, 3, 2, 6, 4]
lst2 = lst1.copy()
lst2.sort()
lst2_max = lst2[-1]
lst2_min = lst2[0]
lst1.remove(lst2_max)
lst1.remove(lst2_min)
print(lst1)

输出为

[3, 2, 4]

问题4:

lst1 = [1, 3, 2, 6, 4],程序实现:删除反向后的lst1中索引为3的元素,并输出该元素

分析

1,分解问题,分析实现步骤:先反向,在删除索引3的元素并返回

2,反向:使用list.reverse()

3,删除索引3元素并返回:使用list.pop()

代码如下

lst1 = [1, 3, 2, 6, 4]
lst1.reverse()
print(lst1.pop(3))

输出为

3

问题5:

lst1 = [1, 2, 3] lst2 = [4, 5, 6],程序实现:把lst2中元素加到lst1中,并对lst1进行降序排列

分析

1,把lst2中元素加到lst1中:直接使用list.extend()

image.png

2,对lst1进行降序排列:使用list.sort()

代码如下

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]

lst1.extend(lst2)
lst1.sort(reverse=True)
print(lst1)

输出为

[6, 5, 4, 3, 2, 1]

问题6:

实现用户输入一串小写的英文字母,输出其中英文字母有几种;例如输入abcd,输出8

分析

1,分解问题,分析实现步骤:先将用户的输入保存到某个变量,再分析此变量中的英文字母数目

2,实现输入:使用input()

3,输出英文字母数目:可以借用集合的不可重复的特性,将变量转换成集合,再输出集合的长度即可

代码如下

a = input("请输入小写英文字母")
a_set = set(a)
print(len(a_set))

输入字母abbbccddeeffggg,输出为

7

问题6:

有如下两个列表:lst1 = [1, 2, 3, 2, 5, 1, 2],lst2 = [2, 7, 9, 5]

编程实现:6.1,求哪些整数既在lst1中,也在lst2中;6.2,求哪些整数在lst1中,不在lst2中;6.3,求两个列表一共有哪些整数

6.1分析

其实就是找交集,可以先转换成集合,然后借用集合的关系测试特性

6.2分析

同6.1,只是找lst1相对于lst2的差集

6.3分析

同6.1,求并集,然后打印出来即可

代码如下

lst1 = [1, 2, 3, 2, 5, 1, 2]
lst2 = [2, 7, 9, 5]
lst1_set = set(lst1)
lst2_set = set(lst2)

# 6.1
print(lst1_set & lst2_set)

#6.2
print(lst1_set - lst2_set)

#6.3
print(lst1_set | lst2_set)

输出为

{2, 5}
{1, 3}
{1, 2, 3, 5, 7, 9}