开始
今天看到python内置的数据类型,list可以说是列表,列表是一种数据类型
list是一种有序的集合,可以随时添加和删除其中的元素
我们列几个名字,用一个list来表示,举个例子:
>>> list1=['张三','jack','李四']
>>> list1
['张三', 'jack', '李四']
这里写的list1就是一个list,用len()函数可以获得list元素的个数,举个例子:
>>> len(list1)
3
也可以用索引来访问list中每一个位置的元素,切记,索引是从0开始的,举个例子:
>>> list1[0]
'张三'
>>> list1[1]
'jack'
>>> list1[2]
'李四'
>>> list1[3]
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
list1[3]
IndexError: list index out of range
前三个本身存在所以正常,而list[3]由于索引超出了范围,所以报了一个IndexError错误,所以,一定要确保索引不要越界!!!
如果要获取某个元素,比如获取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素,倒数第二个,倒数第三个,举个例子:
>>> list1[-1]
'李四'
>>> list1[-2]
'jack'
>>> list1[-3]
'张三'
>>> list1[-4]
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
list1[-4]
IndexError: list index out of range
可以看到,一旦索引越界就会出现错误。
增加和删除元素
list是一个可变的有序表,可以往list中追加元素到末尾,举个例子:
>>> list1.append('tom')
>>> list1
['张三', 'jack', '李四', 'tom']
当然了,你说我想把元素插到想放的位置,也可以,用索引,比如插入到索引号为1的位置,举个例子:
>>> list1.insert(1,'孙悟空')
>>> list1
['张三', '孙悟空', 'jack', '李四', 'tom']
既然有增加,当然也得有删除,删除用pop()方法,比如删除list末尾的元素,举例:
>>> list1.pop()
'tom'
>>> list1
['张三', '孙悟空', 'jack', '李四']
如果你想替换就是修改某个元素,可以直接赋值给对应的索引位置,举例:
>>> list1[2]='杨戬'
>>> list1
['张三', '孙悟空', '杨戬', '李四']
list里面的元素不一定就得是字符串类型,我这样写只是方便,写个数据类型不同的list,举例:
>>> list2=['哪吒',123,True]
>>>
list里面的元素也可以另外一个list,举例:
>>> list3=['python','c',['.net','java'],'c#']
>>> len(list3)
4
可以看到,list3只有4个元素,其中list3[2]也是一个list,拆开来看就很容易理解,举例:
>>> s=['.net','java']
>>> list3=['python','c',s,'c#']
想获取list中的元素,比如'.net'可以写成s[1]或者list3[2][1],可以看到list3可以看成一个二维数组。
如果一个list中一个元素也没有,就是一个空的list,它的长度就是0,举例:
>>> a=[]
>>> len(a)
0
>>> len(list3)
4
tuple
另外还有一种有序列表叫元组,tuple.tuple和list很类似,但是tuple一旦初始化就不能再修改了,举例:
>>> a1=('项羽','虞姬','tom')
到这,a1的这个tuple不能改了,也没有append()方法,insert()方法,其他获取元素的方法和list是一样的,可以正常使用a1[0],a1[-1],但是不能赋值成另外的元素。
那么不可变的tuple还有什么意义?因为tuple不可变,所以代码更安全,能用tuple代替list就尽量使用tuple.
tuple的特点:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,举例:
>>> a2=(1,2,3)
>>> a2
(1, 2, 3)
定义空的tuple也是一样的,不写元素就可以了,和list的写法是有区别的,注意一下,举例:
>>> a3=0
>>> a3
0
看两个例子的区别吧,举个例子:
>>> b =(1)
>>> b
1
>>>
>>> b1=(1,)
>>> b1
(1,)
第一个例子是定义了只有一个元素的tuple,定义的不是tuple,是1这个数,因为括号()既可以表示tuple又可以表示数学公式中的小括号,这样就不对了。所以,python规定,这种情况按小括号计算,那么计算结果就是1了。
第二个例子,只有一个元素的tuple定义时必须加一个逗号,来消除错误。
python在显示只有一个元素的tuple时,也会加一个逗号,避免误解成数学计算意义上的括号。
看个“可变的”tuple,,来看一下:
>>> c=('a','b',['A','B'])
>>> c[2][0]='X'
>>> c[2][1]='Y'
>>> c
('a', 'b', ['X', 'Y'])
注意看,这个tuple定义的时候有3个元素,分别是'a','b'和一个list。当我们把list的元素'A'
和'B'
修改为'X'
和'Y'
后,tuple才变的。表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
主要还是要理解这个概念,还有就是tuple的每一个元素本身也不能变的!!!
最后
list和tuple是python内置的有序集合,一个可变,一个不可变,根据情况来选择。
学编程最重要的还是理解概念和手写代码,光看是没有什么用的,多练习多思考能掌握的更牢固。
今天的分享到此未知。