【python学习笔记】序列

1、python的序列

1、数据结构

首先要了解数据结构的概念:以某种方式(如编号)组合起来的数据元素集合。

2、序列

在python中最基本的数据结构就是序列。序列中每个元素都有编号,即其位置或索引,第一个元素的索引为0,第二个索引为1,以此类推。
最常用的序列包含列表、元组、字符串

3、列表和元组的区别

列表和元组的区别在于:列表是可以修改的,而元组不可以,这意味着列表适用于需要中途添加元素的情形,而元组适用于需要禁止修改序列的情形。
编程时基本上所有情况都可以用列表来代替元组,有一种例外是:将元组用作字典键,这种情况下不能用列表来代替元组,因为字典是不允许修改的。

4、容器

python支持一种数据结构的基本概念,叫做**“容器”,容器基本上就是可以包含其他对象的对象。
两种主要的容器就是
序列(表、元组)映射(字典)。序列中每个元素都有编号**,映射中每个元素都有名称(键)
还有一种既不是序列也不是映射的容器叫做**“集合”**。

5、通用的序列操作

几种操作适用于所有的序列,包括索引、切片、相加、相乘、成员资格检查
还提供了一些内置函数,可用于确定序列长度以及找出序列中最大和最小的元素。
还有一个重要操作叫迭代,用于对序列中的每个元素都执行特定的操作,讲循环的时候再说。

1、索引

序列中所有元素都有编号,从0开始递增。

greeting = 'Hello,hehe'
print(greeting[0])

执行结果:

H

Process finished with exit code 0

注:python没有字符类型,一个字符就是只包含一个元素的字符串。
上面的这种操作叫做“索引”,可用索引获取元素。索引还可以是负数,即从右往左,-1是最后一个元素的位置:

greeting = 'Hello,hehe'
print(greeting[-1])

执行结果:

e

Process finished with exit code 0

如果函数调用返回一个序列,可直接进行索引操作:

>>> a = input("input something:")[2]
input something:abcde
>>> a
'c'

2、切片

切片用于访问特定范围内的元素。操作是使用两个索引,并用冒号分隔:

>>> greeting = 'Hello,hehe'
>>> greeting[2:4]
'll'

注意一个原则“顾前不顾后”,即切片的终点不包含在切片内,而起点包含在切片内。
当然索引也可以是负数:

>>> n = [1,2,3,4,5,6,7,8,9,10]
>>> n[-3:-1]
[8, 9]

如果想让10也在切片内怎么办呢?
肯定不能是[-3:0],因为会返回空序列 。在执行切片操作时,如果第一个索引位于第二个索引指定的元素后面,结果就会为空序列。办法是用一种简写:

>>> n[-3:]
[8, 9, 10]

如果切片的结束位于序列末尾,可以省略第二个索引
同样,如果切片始于序列的开头,可以省略第一个索引

>>> n[:3]
[1, 2, 3]

如果要复制整个序列,可以省略两个索引

>>> n[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

另外还可以设置切片的步长:
普通切片中步长为1,如果想每3个元素提取1个,可以设置步长为4:

>>> n[::4]
[1, 5, 9]

步长不能为0,否则无法移动,但步长可以为负数,即从右向左移动:

>>> n[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

要正确的得到想要的元素,切片操作颇费脑筋。

3、序列相加

就是用“+”来对两个序列进行拼接:

>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> "hello"+"world"
'helloworld'
>>> [1,2,3]+"hello"
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    [1,2,3]+"hello"
TypeError: can only concatenate list (not "str") to list

上述可见,虽然字符串和列表都是序列,但是不同类型的序列不能进行拼接。

4、序列乘法

说的是序列和数字相乘,这会重复这个序列n次,创建一个新序列:

>>> "hi"*5
'hihihihihi'
>>> [15]*10
[15, 15, 15, 15, 15, 15, 15, 15, 15, 15]

这种情况可以用于初始化一个包含10个元素的序列:

>>> s = [None]
>>> s*10
[None, None, None, None, None, None, None, None, None, None]

注意None的写法,不要写成别的东西,None在python中表示“什么都没有”。

>>> s=[none]
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    s=[none]
NameError: name 'none' is not defined
>>> s=[NONE]
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    s=[NONE]
NameError: name 'NONE' is not defined

5、成员资格

就是用来判断特定的值是否包含在序列内,运算符为“in”。

>>> n = [1,2,3]
>>> 1 in n
True
>>> 6 in n
False

满足时返回Ture,不满足返回False,这样的运算符叫做"布尔运算符",而Ture和False叫做“布尔值”。

>>> w = "word"
>>> r in w
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    r in w
NameError: name 'r' is not defined
>>> "r" in w
True

上面的例子要注意字符串的写法。

6、长度和最值

长度:len,最大值:max,最小值:min
这些都是内置函数。

>>> n=[1,2,3]
>>> len(n)
3
>>> max(n)
3
>>> min(n)
1

max、min不光可以传序列,还可以直接传数,但是不能只传一个数:

>>> max(1,2)
2
>>> min(1,2,3)
1
>>> min(123)
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    min(123)
TypeError: 'int' object is not iterable

len传的一定是个序列,如果是一个数会报错:

>>> len(1)
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    len(1)
TypeError: object of type 'int' has no len()
>>> len("1")
1

结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值