python(1) - 列表和元组
列表(list)
列表是经常用到的一种数据类型,是一组有序的数据集合,可以将各种数据有序的存放在列表中,并且可以对其进行增删改查,以及遍历。
列表就是为了使变量能够存储更多的信息,比如我想存储一张购物清单,然后程序只需要调用该变量就可以找到其中的商品。例如:
>>> shopping_list = ['Iphone', 'Mac', 'Bike','Coffee','Car','Clothes','Food','Gift'] >>> shopping_list ['Iphone', 'Mac', 'Bike', 'Coffee', 'Car', 'Clothes', 'Food', 'Gift']
通过内置的len()函数可以查看列表中元素的个数
>>>len(shopping_list)
8
如果要取出shopping_ist列表中的某一个数据,那应该怎么做呢?
>>>shopping_list[0] 'Iphone' >>>shopping_list[2] 'Bike' >>>shopping_list[-1] 'Gift' >>>shopping_list[-2] Food
如上,显然,只需要通过索引就可以取出对应的元素,但要注意的是索引是从0开始的,-1表示倒数第一个元素,-2表示倒数第二个,以此类推,shopping_list列表有8个元素,那索引是0-7,那shopping_list[8]会输出什么呢?
>>>shopping_list(8) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
程序报错了,看最后一行,索引错误,超出列表索引范围。
这里介绍一个函数,这个函数可以将列表中所有元素的索引打印出来
>>> a = ['a','b','c','d'] >>> for k,v in a.enumrate(): ... print(k,v) ... 0 a 1 b 2 c 3 d
前面我们说了怎么取列表中的元素,但是每次只是取一个元素,那有没有办法一次取出多个元素呢?
这就是接下来要说的:列表的切片
>>>shopping_list ['Iphone', 'Mac', 'Bike','Coffee','Car','Clothes','Food','Gift'] >>>shopping_list[0:3] ['Iphone', 'Mac', 'Bike'] >>>shopping_list[:3] ['Iphone', 'Mac', 'Bike'] >>>shoping_list[3:5] ['Coffee','Car'] >>>shopping_list[0:-3] ['Iphone', 'Mac', 'Bike','Coffee','Car'] >>>shopping_list[1:8:2] ['Mac','Coffee','Clothes','Gift']
不多说了,很简单,需要注意的是shopping_list[0:3]取第0-3的元素,不包括索引为3的,因为索引为2的元素就是第三个。
最后一个shopping_list[1:8:2]中,2是步长,即每隔一个取一个
列表的增删改
>>>shopping_list.append('Cup') #向列表追加元素 ['Iphone', 'Mac', 'Bike', 'Coffee', 'Car', 'Clothes', 'Food', 'Gift','Cup'] >>>shopping_list.pop() #删除最后一个元素 'Cup' >>>shopping_list.remove('Mac') #删除叫‘Mac’的元素,如果有多个‘Mac’,则移除第一个 >>>shopping_list ['Iphone', 'Bike', 'Coffee', 'Car', 'Clothes', 'Food', 'Gift'] >>>shopping_list[2] = 'COFFEE' #修改索引为2的元素 >>>shopping_list ['Iphone', 'Bike', 'COFFEE', 'Car', 'Clothes', 'Food', 'Gift'] >>>shopping_list.insert[3,'Toy'] #在索引3的位置插入元素 >>>shopping_list ['Iphone', 'Bike', 'COFFEE','Toy', 'Car', 'Clothes', 'Food', 'Gift'] >>>shopping_list.index('Toy') #返回'Toy'的索引值,如果有多个,则返回第一个 >>>shopping_list.conut('Toy') #返回列表中有多少个'Toy' 1 >>>list = ['apple','orange'] >>>shopping_list.extend(list) #将list合并到shopping_list中 >>>shopping_list ['Iphone', 'Bike', 'COFFEE','Toy', 'Car', 'Clothes', 'Food', 'Gift','apple','orange'] >>> shopping_list.sort() #将列表排序 >>> shopping_list ['Bike', 'COFFEE', 'Car', 'Clothes', 'Food', 'Gift', 'Iphone', 'Toy', 'apple', 'orange'] >>> shopping_list.reverse() #将列表反转 >>> shopping_list ['orange', 'apple', 'Toy', 'Iphone', 'Gift', 'Food', 'Clothes', 'Car', 'COFFEE', 'Bike'] >>> del shopping_list[3:8] #删除列表索引3-7的元素 >>> shopping_list ['orange', 'apple', 'Toy', 'COFFEE', 'Bike']
元组:
与列表差不多,不同的是元组是只读的,一旦定义将不能被修改。
值得注意的是,元组在定义的时候,如果只有一个元素,需要加一个逗号,比如
>>> t = (1) >>> type(t) <class 'int'> >>> t = (1,) >>> type(t) <class 'tuple'> >>> t = ('Jack') >>> type(t) <class 'str'> >>> t = ('Jack',) >>> type(t) <class 'tuple'>
看出问题了吗?如果不加逗号的话,会识别成数字或字符串。所以只有一个元素的时候,需要加一个逗号,消除歧义。