python学习日记2
核心语法
索引
索引作为一种访问方式,我们在访问列表元素的时候最常用到索引。上面我们也提到过,索引值是每个元素对应的位置,那么索引是有一定值的,索引的值是从0开始,因此每个元素对应的位置是他的索引值+1。
切片
序列的切片就是将序列切成小的子序列,切片运算符有两种形式。
1) [start:end]:start为起始索引位置(包含start),end为结束索引位置(不包含end)。
2) [start:end:step]:同上一样,不同的是step,step为步长,在前面讲range()函数的时候提到过这个,它的用法和前面讲的一样,在这里指切片之间的间隔,但是步长对应的是每两个子序列间的间隔的值减1,不含step时默认为1(此时无间隔),step也可以为负值。
切片在列表操作的时候经常会使用到,使用切片还可以进行列表或字符串的逆序等操作。
举个简单的例子
my_list = [1,2,3,4,5,6,7,8,9,] print('取列表的前5项',my_list[0:4])#当0省略的时候默认为0,即为my_list[:4] print('取列表的第2-4项',my_list[1:4])#注意4是列表的第五项,但是在这里是不包含4的,所以没有第五项 print('取列表所有项,步长为2',my_list[::2])#步长为2,也就是走2步,所以间隔为1 print('取列表的逆序',my_list[::-1])#当步长为-1的时候,也就是反向走了一遍,即为逆序
输出结果
取列表的前5项 [1, 2, 3, 4] 取列表的第2-4项 [2, 3, 4] 取列表所有项,步长为2 [1, 3, 5, 7, 9] 取列表的逆序 [9, 8, 7, 6, 5, 4, 3, 2, 1]
切片能使用字符串、元组和列表
a= '123456' b = (1,2,3,4,5,6) c = [1,2,3,4,5,6] a = a[::-1] b = b[::-1] c = c[::-1] print(a) print(b) print(c)
加法
序列具有相加的功能,这个相加同我们数字之间的相加类似,但序列支持将两个类型相同的序列加在一起,使用‘+’符号进行操作。
my_list = [1,2,3,4,5,6,7,8,9,] my_list2 = [11,22,33,44,55,66] my_str = 'abcdefghijklmn' my_str2 = 'opqrstuvwxyz' my_tuple = (1,2,3,4,5) my_tuple2 = (6,7,8,9) print('两个列表相加后为:',my_list+my_list2) print('两个字符串相加后为:',my_str+my_str2) print('两个元组相加后:',my_tuple+my_tuple2)
输出结果
两个列表相加后为: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66]
两个字符串相加后为: abcdefghijklmnopqrstuvwxyz
两个元组相加后: (1, 2, 3, 4, 5, 6, 7, 8, 9)
乘法
my_list = [1,2,3,4,5] my_str = 'www.dotcpp.com' my_tuple = (1,2,3,4,5) print('将my_list列表乘上3得到一个新列表为:',my_list*3) print('将my_str字符串乘上3得到一个新字符串为:',my_str*3) print('将my_tuple元组乘上3得到一个新元组为:',my_tuple*3)
输出结果
将my_list列表乘上3得到一个新列表为: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
将my_str字符串乘上3得到一个新字符串为:www.dotcpp.comwww.dotcpp.comwww.dotcpp.com
将my_tuple元组乘上3得到一个新元组为: (1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
序列的乘法还有一个初始化指定长度列表的功能。
my_list = [None] * 5#实现一个长度为5的初始化列表 print(my_list)
输出
[None, None, None, None, None]
常用的内置函数
| sum() |
求序列中所有值的和 |
| max() | 求序列中的最大值 |
| min() | 求序列中的最小值 |
| len() | 求序列的长度 |
| str() | 把序列格式转换为字符串 |
| list() | 把序列格式转换为列表 |
| set() | 把序列格式转换为集合 |
| tuple() | 把序列格式转换为元组 |
| reversed() | 把序列中的所有元素进行逆序 |
| sorted() | 把序列中的所有元素进行排序 |
| enumerate() | 把序列组合成一个索引序列,一般在for循环中 |
1.sum()函数用法
sum(iterable[start:end]
其中iterable指可迭代的,在这里我们指序列,start代表对应序列的起始位置(包含),而end为终止位置(不包含此位置),用这种切片方式我们可以求出指定片段的序列和,当仅使用sum(iterable)的时候即求出整个序列的和。关于sum()函数需要注意它只针对整数求和,如果序列我们要求的项中有非整数部分,那么就报错。
2.max()函数和min()函数
对于这两个函数,大家可以很简单的从字面意思理解到它是求最大值和最小值的,因此我们一样可以在序列中使用他们,同时也要注意他们不止是针对整数段,他们还支持对字符串的处理。
my_list = [1,2,3,4,5,6] my_str = '123456' my_tuple = (1,2,3,4,5,6) my_set = {1,2,3,4,5,6} string = 'abcedfg'#当对于英文字母时 listing = ['a','b','c','d'] print(max(my_list),min(my_list))#求列表中的最大值和最小值 print(max(my_str),min(my_str))#求字符串中的最大值和最小值 print(max(my_tuple),min(my_tuple))#求元组中的最大值和最小值 print(max(my_set),min(my_set))#求集合中的最大值和最小值 print(max(string),min(string))#字母中的最大和最小值 print(max(listing),min(listing))#列表中字母的最大和最小值 输出结果为: 6 1 6 1 6 1 6 1 g a d a
列表基础操作
定义列表
my_liss = []#定义空列表 my_list = [1,2,3,4,5,6]#定义已有值的列表 my_lizz = ['a','b','c','d']
我们可以把列表当作一种容器,我们用它来存放东西,可以在其中存放相同类型的数据,也可以存放不同类型的数据,但是为了提高程序的可读性,建议在一个列表中存放同一种数据类型。
数值列表的创建(list()函数)
删除列表
del my_list
复制
first_list = [1, 2, 3, 4] # 先定义一个列表 second_list = first_list # 复制这个列表 print('修改前(第一个列表和第二个列表):', first_list, ',', second_list) # 输出看一下 first_list[0] = 10 print('修改后(第一个列表和第二个列表):', first_list, ',', second_list) # 再输出看一下 print(id(first_list), id(second_list)) # 通过访问id可以发现此时两个列表地址是相同的
修改前(第一个列表和第二个列表): [1, 2, 3, 4] , [1, 2, 3, 4] 修改后(第一个列表和第二个列表): [10, 2, 3, 4] , [10, 2, 3, 4] 2623951954504 2623951954504
如果想要使用相同内容的列表但各自独立的话可以采用下面的方法:
first_list = [1,2,3,4]#先定义一个列表 second_list = [] + first_list#使用连接符 print(id(first_list),id(second_list))#通过访问id可以发现此时两个列表是相互独立的 输出结果为: 1899857928776 1900113448584
一些常用函数
| index(element) | 返回与element值相同的第一个元素的索引。如果element在列表中没有找到,会引发Value.Error异常 |
| append(element) | 将element添加到列表末尾 |
| remove(element) | 从列表中移除x出现的第一个元素。如果element在列表中没有找到,会引发Value-Error异常 |
| insert(index,element) | 将element插人到列表中指定的index位置。 |
| sort() | 将列表的元素按从小到大排列 |
| reverse() | 逆置列表中的所有元素 |
遍历列表
1) for循环方式遍历
first_list = [1,2,3,4]#先定义一个列表 for i in first_list:#i为用于保存从列表中获取到的元素值,要输出元素的时候直接输出i即可。 print(i)
2 for循环方式配合enumerate()函数遍历
for index,element in enumerate(list):
查找元素
my_list = ['小明','小华','小天','小娜','小美','小李'] print(my_list.index('小天'))
输出结果: 2
列表排序
my_list = [2,1,3,5,4,6,8,9,7,10] my_list.sort()#这种格式是直接在列表后使用sort()函数 b = sorted(my_list)#这种方式是定义一个新列表来存放排序过的序列 print(b) print(my_list)
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
列表逆序
my_list = [2,1,3,5,4,6,8,9,7,10] c = list(reversed(my_list))#使用reversed逆序一定要加上一个存储类型 my_list.reverse()#使用reverse逆序 print(c)#输出 print(my_list)#输出
输出
[10, 7, 9, 8, 6, 4, 5, 3, 1, 2]
[10, 7, 9, 8, 6, 4, 5, 3, 1, 2]
练习1
从键盘输入任意20个整型数,统计其中的负数个数并求所有正数的平均值。
保留两位小数
d = list(map(int,input().split())) while len(d)<20: d.extend(list(map(int,input().split()))) sum1 = 0 sum2 = 0 sum = 0 for i in range(20): if d[i]<0: sum1 += 1 if d[i]>0: sum2 +=1 sum += d[i] avr = sum/sum2 print(sum1) print("%.2f"%avr)
练习2
编写并测试如下函数:
void Add (int a[], int m, int b[], int n);
该函数将数组b的前n个元素追加到数组a的前m个元素后,假定数组a具有至少存放m+n个元素的空间。例如,如果数组a为 {22,33,44,55,66,77,88,99},数组b为{20,30,40,50,60,70,80,90},则调用Add(a,5,b,3) 后,将把数组a变为{22,33,44,55,66,20,30,40}。注意数组b并没有改变,而且数组a中只需改变n个元素。
m,n = map(int,input().split()) list1 = list(map(int,input().split())) list2 = list(map(int,input().split())) m1,n1 = map(int,input().split()) l = list1[:m1] k = list2[:n1] l.extend(k) if m1 + n1 < m: s3 = list1[m1+n1:] l.extend(s3) print(",".join([str(i) for i in l]))

浙公网安备 33010602011771号