赞
踩
首先要了解数据结构的概念:以某种方式(如编号)组合起来的数据元素集合。
在python中最基本的数据结构就是序列。序列中每个元素都有编号,即其位置或索引,第一个元素的索引为0,第二个索引为1,以此类推。
最常用的序列包含列表、元组、字符串。
列表和元组的区别在于:列表是可以修改的,而元组不可以,这意味着列表适用于需要中途添加元素的情形,而元组适用于需要禁止修改序列的情形。
编程时基本上所有情况都可以用列表来代替元组,有一种例外是:将元组用作字典键,这种情况下不能用列表来代替元组,因为字典是不允许修改的。
python支持一种数据结构的基本概念,叫做**“容器”,容器基本上就是可以包含其他对象的对象。
两种主要的容器就是序列(表、元组)和映射(字典)。序列中每个元素都有编号**,映射中每个元素都有名称(键)。
还有一种既不是序列也不是映射的容器叫做**“集合”**。
几种操作适用于所有的序列,包括索引、切片、相加、相乘、成员资格检查。
还提供了一些内置函数,可用于确定序列长度以及找出序列中最大和最小的元素。
还有一个重要操作叫迭代,用于对序列中的每个元素都执行特定的操作,讲循环的时候再说。
序列中所有元素都有编号,从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'
切片用于访问特定范围内的元素。操作是使用两个索引,并用冒号分隔:
>>> 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]
要正确的得到想要的元素,切片操作颇费脑筋。
就是用“+”来对两个序列进行拼接:
>>> [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
上述可见,虽然字符串和列表都是序列,但是不同类型的序列不能进行拼接。
说的是序列和数字相乘,这会重复这个序列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
就是用来判断特定的值是否包含在序列内,运算符为“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
上面的例子要注意字符串的写法。
长度: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
结束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。