序列
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python中常见的序列结构有:字符串、列表、集合、元组、字典等。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
例如一个整数序列a=[10,20,30,40],可以表示为:
10 | 20 | 30 | 40 |
---|
由于python3中一切皆对象,在内存中实际存储的是对象的地址,而非对象的值:
列表创建
- 基本语法 [] 创建
>>> a = [1,2,3,4]
>>> a
[1, 2, 3, 4]
- list()创建
list可将迭代数据转化为列表:
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list("Rico")
['R', 'i', 'c', 'o']
list()产生一个空列表:
>>> list()
[]
- 使用推导式创建:
>>> a = [2*x for x in range(5)]
>>> a
[0, 2, 4, 6, 8]
>>> a = [x for x in range(100) if x%5 == 0]
>>> a
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
列表元素的增加和删除
- +运算符操作
生成一个新的列表,将两个列表拼接为一个新列表:
>>> a = [0,1,2,3,4]
>>> a + [5]
[0, 1, 2, 3, 4, 5]
>>> a = [0,1,2]
>>> b= [3,4,5]
>>> a+b
[0, 1, 2, 3, 4, 5]
- 使用.append()的方法
在列表尾部添加一个元素:
>>> a = [0,1,2,3,4]
>>> a.append(5)
>>> a
[0, 1, 2, 3, 4, 5]
- 使用.exrend()的方法:
将目标所有元素添加到列表的尾部,效果类似于+拼接
>>> a = [0,1,2]
>>> b = [3,4,5]
>>> a.extend(b)
>>> a
[0, 1, 2, 3, 4, 5]
注意:用 + 拼接和 .append() 、.extend()的区别:+修改的整个列表对象,而.append()仅仅修改了对象的值。
>>> a = [0,1,2,3,4]
>>> id(a)
2394342943176
>>> a.append(5)
>>> a
[0, 1, 2, 3, 4, 5]
>>> id(a)
2394342943176
>>> a = [0,1,2]
>>> b = [3,4,5]
>>> id(a)
2394342942472
>>> a.extend(b)
>>> a
[0, 1, 2, 3, 4, 5]
>>> id(a)
2394342942472
>>> a = [0,1,2,3,4]
>>> id(a)
2394342943176
>>> a = a+[5]
>>> id(a)
2394342849224
因此通常不推荐使用+拼接操作。
- .insert()的使用
在将对象插入列表的某一个位置
语法格式:list.insert(index, obj)
>>> a = [0,1,3,4,5]
>>> a.insert(2,6)
>>> a
[0, 1, 6, 3, 4, 5]
列表元素的删除
- del 删除
删除表格指定位置的元素
>>> a = [10,20,66,40,50]
>>> del a[2]
>>> a
[10, 20, 40, 50]
原理:
将目标元素删除,其后的元素位置都会发生变化。
- .pop()方法
删除并返回指定位置元素,如果未指定则默认删除列表最后一个元素。
>>> a = [10,20,66,40,50]
>>> b = a.pop(2)
>>> b
66
>>> c = a.pop()
>>> c
50
>>> a
[10, 20, 40]
>>>
- .remove()方法
删除首次出现的指定元素,若指定元素不存在则抛出异常。
>>> a = [10,20,30,20,40,20,50]
>>> a.remove(20)
>>> a
[10, 30, 20, 40, 20, 50]
列表排序
- .sort(),修改原列表,不建立新列表的排序
list.sort() 升序排列
>>> a = [10,50,40,20,30]
>>> a.sort()
>>> a
[10, 20, 30, 40, 50]
list.sort(reverse=True) 降序排列
>>> a = [10,50,40,20,30]
>>> a.sort(reverse=True)
>>> a
[50, 40, 30, 20, 10]
- sorted(),新建列表的排序
通过内置函数sorted()进行排序,返回新列表,不对原列表进行修改。
sored()升序,sorted(list,reverse=True)降序
>>> a = [10,50,40,20,30]
>>> b = sorted(a)
>>> b
[10, 20, 30, 40, 50]
>>> a
[10, 50, 40, 20, 30]
>>> c = sorted(a,reverse=True)
>>> c
[50, 40, 30, 20, 10]
- .reverse(),列表反向排列
>>> a = [10,50,40,20,30]
>>> a.reverse()
>>> a
[30, 20, 40, 50, 10]
- reversed()返回迭代器
内置函数reversed()也支持逆序排列,与.reverse()不同的是,内置函数reversed()不对原列表做任何修改,而是返回一个逆序排列的迭代器对象。
>>> a = [10,50,40,20,30]
>>> b = reversed(a)
>>> b
<list_reverseiterator object at 0x000001D7090C6198>
>>> list(b)
[30, 20, 40, 50, 10]
>>> b
<list_reverseiterator object at 0x000001D7090C6198>
>>> list(b)
[]
从代码中可以看到,使用reversed()返回的不是一个列表,需要使用list()将迭代器中的存储信息传递到列表中。迭代器在使用之后会被释放,所以只能使用一次。