一、列表
Python
中等列表与Java
等语言中等数组类似。用方括号[]
包括起来,以逗号,
来分隔其中的元素。元素可以是任意类型,数字(整数和浮点数)、布尔(bool)、字符串、列表、字典、元组。
例:
>>> list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
1.索引
①正索引和负索引
在字符串一节我们提到,Python
中的字符串其实是一个Unicode
字符列表,并且具有正负索引。列表具有正负索引。
以上例中的列表为例:
字符 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 | 星期天 |
---|---|---|---|---|---|---|---|
正索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
负索引 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
>>> list[3]
'星期四'
>>> list[-4]
'星期四'
# 字符串本身就是字符列表,所以字符串列表本质就是个二维列表。
>>> list[3][2]
'四'
虽然拥有正负索引,但是仍然需要注意超出索引范围导致的错误
>>> list[-8]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> list[7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
②列表截取(切片):截取后的内容组成新的列表
语法:list[开始索引:结束索引]
,遵循包左不包右原则。不写开始索引和结束索引,为全部。
>>> list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
>>> list[2:6]
['星期三', '星期四', '星期五', '星期六']
>>> list[2:]
['星期三', '星期四', '星期五', '星期六', '星期天']
>>> list[:6]
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
>>> list[:]
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
2.添加列表元素
①append()
:列表末尾添加
>>> list.append("假期")
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']
②insert()
:在列表中插入元素
>>> list.insert(3,"insert")
>>> print(list)
['星期一', '星期二', '星期三', 'insert', '星期四', '星期五', '星期六', '星期天', '假期']
③extend()
:将一个列表依次插入到另一个列表中
>>> list.extend(extendList)
>>> print(list)
['星期一', '星期二', '星期三', 'insert', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
3.删除列表元素
①del
语句和del()
删除元素:可以根据索引删除任何位置的列表元素
# 删除前
>>> print(list)
['星期一', '星期二', '星期三', 'insert', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
>>> del list[3]
# 删除后
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
>>> del(list[1])
>>> print(list)
['星期一', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
②pop()
删除元素:默认索引为-1
,删除最后一个列表值。并且返回该元素的值。也可以通过设置下标索引进行删除
# 删除前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
>>> list.pop()
'周三'
# 删除前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二']
>>> list.pop(-2)
'周一'
③remove()
:根据值删除元素
# 删除前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周二']
>>> list.remove("周二")
# 删除后
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']
只会删除第一次出现的值。
>>> removelist = [1,1,3,3,4,1,1,6]
>>> removelist.remove(1)
>>> print(removelist)
[1, 3, 3, 4, 1, 1, 6]
④ clear()
清空列表,类似于 del a[:]
>>> list.clear()
>>> print(list)
[]
总结:
1、知道值不知道索引选`remove()`;
2、知道索引但是不再使用被删除的值选`del`;
3、知道索引在删除后还想继续使用被删除的值,选`pop()`。
4.修改列表元素
修改元素的语法与访问的语法类似,直接通过索引获取要修改的元素,然后给其设置上新的值即可。
# 修改前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']
>>> list[-1] = "不放假"
# 修改后
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '不放假']
5.列表的整理
① sort()
:对列表进行永久性排序
>>> sortlist = [332,12,1,4,55,2,44]
>>> sortlist.sort()
>>> print(sortlist)
[1, 2, 4, 12, 44, 55, 332]
② sorted()
:对列表进行临时排序
>>> sortedlist = [332,12,1,4,55,2,44]
>>> sorted(sortedlist)
[1, 2, 4, 12, 44, 55, 332]
>>> print(sortedlist)
[332, 12, 1, 4, 55, 2, 44]
③reverse()
:按照索引位置,整体倒过来,不是按照顺序排序。
>>> reverselist = [23,11,23,1,4,555,666]
>>> reverselist.reverse()
>>> print(reverselist)
[666, 555, 4, 1, 23, 11, 23]
6.列表索引的查找
>>> list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']
>>> list.index("星期三")
2
>>> list.index("星期三",2)
2
# 包左不包右
>>> list.index("星期三",0,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: '星期三' is not in list
>>> list.index("星期三",0,3)
2
7.统计列表中元素出现的次数
>>> list = [123,122,333,22,111,1123,123,123]
>>> list.count(123)
3
8.列表的复制
语法:目的列表 = 复制源列表[:]
>>> list1 = [1,2,3,4]
>>> list2 = list1[:]
>>> list2
[1, 2, 3, 4]
肯定有人问了,为什么不直接写成list2 = list1
。我们先看一下效果。
>>> list3 = list1
>>> list3
[1, 2, 3, 4]
在不对列表进行改变的前提下,两者都达到了复制都目的,但是从根本上来讲。list3 = list1
利用Java中都地址值来说。list3
和list1
指向同一地址,也就是说,list3
就是list1
,list1
就是list3
,两者直接是完全相同都,而不是复制出来都副本关系。我们现在来改变list1
都值,再来看list2
和list3
都变化。
>>> list1[1] = 22
>>> list1
[1, 22, 3, 4]
>>> list2
[1, 2, 3, 4]
>>> list3
[1, 22, 3, 4]
现在可以看出两者都区别了吧! 所以列表复制的语法必须是目的列表 = 复制源列表[:]
。
9.列表解析又叫做列表推导式
在学习之前我们先学习range()
方法,用来生产一系列数字
>>> for value in range(1,6):
... print(value)
...
1
2
3
4
5
语法:
[expression for iter_val in iterable]
[expression for iter_val in iterable if cond_expr]
>>> list = [value for value in range(1,10)]
>>> print(list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list = [value for value in range(1,10) if value >= 4]
>>> print(list)
[4, 5, 6, 7, 8, 9]
10.多重赋值
>>> list1 = [1,2,3,4]
>>> a, b, c, d=list1
>>> a
1
>>> b
2
>>> c
3
>>> d
4
当然需要赋值的变量个数要与列表长度一致,否则便会报错。
>>> a, b, c, d, e=list1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 5, got 4)
>>> a, b, c=list1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)
二、元组
Python
的元组
与列表
类似,不同之处在于元组
的元素不能修改。元组
使用小括号()
,列表使用方括号[]
。
注意:元组中只包含一个元素时,需要在元素后面添加逗号tup1 = (1,)
。因为不带逗号python会将其识别为其他类型。
# 不加逗号
>>> tup1 = (1)
>>> tup1
1
>>> type(tup1)
<class 'int'>
# 加上逗号
>>> tup1 = (1,)
>>> tup1
(1,)
>>> type(tup1)
<class 'tuple'>
虽然元组
自身不能修改但是可以通过多个元组拼接成新元组。
>>> tup1=(1,2)
>>> tup2=(2,3)
>>> tup3=tup1+tup2
>>> tup3
(1, 2, 2, 3)
也可以通过del
语句来删除整个元组。
>>> tup3
(1, 2, 2, 3)
>>> del tup3
>>> tup3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'tup3' is not defined
无关闭分隔符,任意无符号的对象,以逗号隔开,默认为元组。
>>> tup1 = 12,31
>>> tup1
(12, 31)
>>> type(tup1)
<class 'tuple'>
关于列表与元组就到此结束了。
每日一言
虽然选择大于努力,但努力会为选择提供更多的选项。
网友评论