Python数据结构之:列表
Python数据结构之:列表
-
特性
1> 有序的集合
2> 通过偏移来索引数据
3> 支持嵌套
4> 数据可变
2. 切片
1> 正向索引
>>>a = [1,2,3,4,5,6,7,7]
>>>a[1:3] #取第2个到第3个的列表元素
[2, 3]
>>>a[0:5:2] #从第1个到第5个列表元素中每隔1个的元素
[1, 3, 5]
2> 反向索引[反向索引中必须指定索取元素间隔]
>>>a[-1:-3] #没有指定元素间隔,没有数据
[]
>>>a[-1:] #取倒数第1个元素
[7]
>>>a[-1:-4:-1] #取倒数第1个到倒数第3个的元素
[7, 7, 6]
>>>a[-1:-6:-2] #取倒数第1个到倒数第5个,每隔1个元素
[7, 6, 4]
3> 默认索引
>>>a[1:] #从第2个到最后1个
[2, 3, 4,5, 6, 7, 7]
>>>a[1::2] #从第2个,每隔1个
[2, 4, 6, 7]
3. 添加操作
1> + 操作符,生成一个新的列表
>>>a
[1, 2, 3,4, 5, 6, 7, 7]
>>>b = ['a','b','c']
>>>a + b
[1, 2, 3, 4, 5, 6, 7, 7, 'a', 'b','c']
2> extend 将所扩展列表的每个元素添加到指定列表中,原地修改列表而不是修改列表
>>> id(a)
47694603774000
>>> c = a.extend(b)
>>> c
>>>
>>>id(a)
47694603774000
3> append 在列表的末尾添加元素
>>>a
[1, 2, 3,4, 5, 6, 7, 7, 'a', 'b', 'c']
>>>a.append('e')
>>>a
[1, 2, 3,4, 5, 6, 7, 7, 'a', 'b', 'c', 'e']
4> insert 在列表的指定位置添加元素
>>> a
[1, 2, 3, 4, 5,6, 7, 7, 'a', 'b', 'c', 'e']
>>> a.insert(3,10) #在第4个元素前面插入‘10’
>>> a
[1, 2, 3, 10, 4, 5, 6, 7, 7, 'a', 'b', 'c', 'e']
>>> a.insert(0,'f')
>>> a
['f', 1, 2, 3, 10, 4, 5, 6, 7, 7, 'a', 'b', 'c', 'e']
4. 修改和删除操作
1> del 删除列表或者删除指定元素
>>>a
['f', 1,2, 3, 10, 4, 5, 6, 7, 7, 'a', 'b', 'c', 'e']
>>>b
['a','b', 'c']
>>>del b #删除b列表
>>>b
Traceback(most recent call last):
File "<stdin>", line 1, in ?
NameError:name 'b' is not defined
>>>del a[0] #删除a列表的第1个元素
>>>a
[1, 2, 3, 10, 4, 5, 6, 7, 7, 'a','b', 'c', 'e']
2> remove 移除匹配的第1个元素
remove(value) -- remove first occurrence of value
>>> b = [1,2,3,'a','b','a']
>>>b.remove('a') #移除匹配元素’a’第1个
>>> b
[1, 2, 3, 'b', 'a']
3> pop 返回列表指定的1个元素并删除(没有指定的话默认为最后1个元素)
L.pop([index]) -> item -- remove and return item at index(default last)
>>>b
[1, 2, 3,'b', 'a']
>>>b.pop() #返回最后1个元素并删除
'a'
>>> b
[1, 2, 3, 'b']
>>> b.pop(1) #返回第2个元素并删除
2
>>> b
[1, 3, 'b']
4> 指定元素的修改
>>> b
[1, 3, 'b']
>>>b[1] = 2
>>> b
[1, 2, 'b']
5. 成员关系,多用于判断元素是否在列表内
in --- not in 返回一个bool类型,true orfalse
>>>b
[1, 2,'b']
>>>1 in b
True
>>>'a' in b
False
>>> '1' in b
False
6. 列表推导式
1> [expr for iter_var in iterable]
首先迭代iterable中所有的内容,每一次迭代的值都交给iter_var进行引用,再在expr表达式中应用iter_var引用的值,expr表达式的值作为列表的元素而进行引用。
>>>a = [i for i in range(1,11)]
>>>a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a =[(2*i + 1) for i in range(1,11,2)]
>>>a
[3, 7,11, 15, 19]
2> [expr for iter_var in iterableif cond_expr]
在推导式的基础上加入判断语句
>>>a = [i for i in range(1,11) if i%2 == 1]
>>>a
[1, 3, 5, 7, 9]
7. 列表的排序与反转:sort reverse sorted
1> sort 将指定列表进行排序(可以是正向也可以使逆向),直接修改原有列表,id值不变,返回值为none
sort(...)
L.sort(cmp=None, key=None, reverse=False)-- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
>>>a
[33, 44, 9, 12, 55]
>>> a.sort()
>>> a
[9, 12, 33, 44, 55]
>>> b =a.sort()
>>> b
>>>
2> reverse将指定列表进行反转排列,直接修改原有列表,返回值为none
reverse(...)
reverse() -- reverse *IN PLACE*
>>> a
[33, 44, 9, 12, 55]
>>> a.reverse()
>>> a
[55, 12, 9, 44, 33]
>>> b =a.reverse()
>>> b
>>>
3> sorted 将指定列表进行正序排序,没有直接修改原有列表,生成新的列表,参数和使用方法和sort一样(2.4以下版本不支持)