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

 

posted @ 2021-02-17 21:47  报与桃花一处开  阅读(60)  评论(0)    收藏  举报
返回顶端