由于前几天考试的事情耽误了学习的进程,同时呢也因为学习进入了比较困难得地方,所以学习周期时间增长,但是我也不会放弃,坚持学习,坚持就是胜利!
引入序列结构之前,我们先引入py里的索引:
1:计算内部序列长度的函数:len()函数,这个函数可以计算一个字符串程度,同时对于我们接下来的序列结构,虽然长得不一样,但是len都能计算出他们的长度,至于具体计算出的是什么,这要根据我们的序列结构来说;
2:序列的相加:py的加法在很多方面都可以使用,这里给大家举出一个例子:字符串相加:
a = 'absd'
b = 'asdja'
c = a + b
print(c)#print(a + b)
两种写法都可,同时,对于一些序列结构如列表,元组,集合都是支持相加 *** 作的;
3:对序列有切片 *** 作:结构:序列[start:end:step],意为从起始位置到结束为止每隔step个切割;当然,start为负数时,end也为负数可以逆序输出,step不写默认为零,start不写默认为0,end不写默认为尾部;
4:对序列的其他 *** 作:x in s,判断x是都在s里,返回的是布尔值,同理有x not in s
max(x)计算x中最大的值,同理有min(x)
s.index(x),计算x第一次出现时,x的位置。s.count()计算x的总个数
5:列表:列表里可以存放不同的数据eg:lst=[10,20,'py']
列表相加意为合并,列表乘某一个数意为合并;
(1):直接使用[]创建,列表名=[元素1,元素2,...]
(2):使用内置函数,列表名=list(序列)
(3):列表的删除:del 列表名
6:列表的遍历:
(1):使用for循环遍历:
a = [10, 20, 'php', 30, 40, 20]
for i in a:
print(i)
(2):使用索引完成遍历:
a = [10, 20, 'php', 30, 40, 20]
for i in range(len(a)):
print(a[i])
这里的range自动识别为长度,也就是从开始到结束;
(4):使用for循环和enumerate函数:
a = [10, 20, 'php', 30, 40, 20]
for i, j in enumerate(a, 0):
print(i,j)
这里的0可以不写,不写默认为从0开始计数,但是并不改变遍历,仍然遍历整个列表
7:列表的相关 *** 作
新增元素:lst.append(内容)可以是各种类型,这个函数也可用在其他序列类型中
在指定位置插入:lst.insert(index,内容)index是你想要插入的位置
删除lst.remove(内容)删除remove的元素
索引删除:lst.pop(x)删除x元素
清空列表:lst.clear()
列表反向:lis.reverse
列表拷贝:生成新的列表,内容一样,但是位置不同。new_lis=lis.copy()
列表元素的修改Llst[x]=内容
8:列表的排序;
(1):sort函数:lst.sort()里面不写默认为升序,如果写:reverse=False改为降序
a = [10, 20, 50, 30, 40, 20]
a.sort()
print(a)
切记:一定得是同种类型的元素,比如不能同时有有int和字符串
如果全是字符串的话,首先按大写的,含大写字母的字符串一定在前,其次按ascii排
这里还有两个函数:如果想要不按大小排,只需要在sort里写:key=str.lower
如果想要改变升序或者降序,可以加入:reverse=False or True来改变升降序,不写默认为False升序,谁前谁后都没问题(已测试)
(2):sorted函数,会生成一个新的列表,原列表不变:
结构:列表名=sorted(列表名),支持reverse和key
9:列表生成式:
(1):a=[i for i in range(1, 10)]生成一个从1-10的列表;
(2):创建随机列表:
import random
a = [random.randint(1, 100) for _ in range(10)]
print(a)
这里range有多种用法,等会给大家细讲;
(3):加条件生成:
a = [i for i in range(1, 15) if i % 2 == 0]
print(a)
10:二维列表:只需要吧一维列表每个元素赋值一个列表即可
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in lst:
for j in row:
print(j, end='\t')
print()
使用生成式:
lst = [[j for j in range(1, 5)] for _ in range(1, 4)]#_的意思是只循环,不遍历
print(lst)
11:元组:
元组是和列表特别像,数据可以是任意类型,甚至是元组
生成元组的一个方法:tuple函数,eg:t=tuple('helloworld')他会把字符串分割,只留下字母,对于序列就把每个值拿出,range也可以;
对元组的 *** 作:判断是否在元组:x in t
求最大值,最小值,长度:max(t),min(t),len(t)
求元素第一次出现的位置和总次数t.index(x),t.count
生成元组只有一个值时,逗号不能省:t=(a,)
删除元组del t
12:元组的遍历,可使用t[x]对下标为x的元组元素进行访问
切片:
t = (4, 6, 7)
t2 = t[0: 3: 1]
print(t2)
切记:切完之后得到的是列表,目前能进行切片的不输出都以列表形式出现;
组合遍历也支持
t = (4, 6, 7)
for i in range(len(t)):
print(t[i])
enunerate也可以,这里就不写了
13:元组的生成式:
结构:直接看代码吧
t = (i for i in range(1,10))
print(t)
t = tuple(t)
print(t)
这里注意,使用()生成的是元组,使用[]生成的是列表,以后使用{}生成的是集合
元组生成的第一个t叫做生成器对象,这时候你是看不到里面的东西的,我们可以使用tuple函数转成列表即可输出
当然,可以使用for循环直接对生成器对象遍历
t = (i for i in range(1,10))
for i in t:
print(i)
元组支持的其他 *** 作:比如我们可以使用加法直接把两个元组合并,这里,元组合并后并不会去重,这点注意;
我们来给大家看一下切片和range的三种写法,这里我们只写range,切片同理
结构:range[start,end,step]这里的,换成:就是切片了
当只有一个数字,默认是end,两个数字默认是start和end
stap不写默认是1,start不写默认是开始,end不写默认是最后
这一章其实通过我们的观察,我们可以发现c与c++和py比起来,py真的是太方便了,相对于py来说,c与c++严谨密切,我所知目前想range这样不屑默认的函数只有c++的sort排序里的cmp,如此一比,py真的是要比c++好很多
由于本人目前在学c++指针往后和py,所以可能更新较慢,望谅解,明天更新c++部分
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)