L'E

言必虑其所终!

导航

Python学习笔记(六)列表

list

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

比如,列出班里所有同学的名字,就可以用一个list表示:

1 >>> classmates = ['sky', 'eric', 'lzz']
2 >>> classmates
3 ['sky', 'eric', 'lzz']

变量classmates就是一个list。用len()函数可以获得list元素的个数:

1 >>> len(classmates)
2 3

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

 1 >>> classmates[0]
 2 'sky'
 3 >>> classmates[1]
 4 'eric'
 5 >>> classmates[2]
 6 'lzz'
 7 >>> classmates[3]
 8 Traceback (most recent call last):
 9   File "<stdin>", line 1, in <module>
10 IndexError: list index out of range

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:

1 >>> classmates[-1]
2 'lzz'

以此类推,可以获取倒数第2个、倒数第3个:

View Code

list是一个可变的有序表,所以,可以往list中追加元素到末尾:

1 >>> classmates.append('acer')
2 >>> classmates
3 ['sky', 'eric', 'lzz', 'acer']

也可以把元素插入到指定的位置,比如索引号为1的位置:

1 >>> classmates.insert(1, 'admin')
2 >>> classmates
3 ['sky', 'admin', 'eric', 'lzz', 'acer']

要删除list末尾的元素,用pop()方法:

1 >>> classmates.pop()
2 'acer'
3 >>> classmates
4 ['sky', 'admin', 'eric', 'lzz']

要删除指定位置的元素,用pop(i)方法,其中i是索引位置:

1 >>> classmates.pop(0)
2 'sky'
3 >>> classmates
4 ['admin', 'eric', 'lzz']

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

1 >>> classmates[1] = 'hugo'
2 >>> classmates
3 ['admin', 'hugo', 'lzz']

list里面的元素的数据类型也可以不同,也可以是另一个list

1 >>> lis = ['lzj', 121, ['ab', 'cd']]
2 >>> lis
3 ['lzj', 121, ['ab', 'cd']]
4 >>> lis[2]
5 ['ab', 'cd']
6 >>> lis[2][1]
7 'cd'
8 >>> len(lis)
9 3

可以使用 del 语句来删除列表的的元素

1 >>> del lis[2]
2 >>> lis
3 ['lzj', 121]

 

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

表达式结果描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代

 

 

 

 

 

 

列表的函数和方法

序号函数
1 cmp(list1, list2)
比较两个列表的元素
2 len(list)
列表元素个数
3 max(list)
返回列表元素最大值
4 min(list)
返回列表元素最小值
5 list(seq)
将元组转换为列表

 

 

 

 

 

 

 

 

 

 

 序号方法
1 list.append(obj)
在列表末尾添加新的对象
2 list.count(obj)
统计某个元素在列表中出现的次数
3 list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4 list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj)
将对象插入列表
6 list.pop(obj=list[-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj)
移除列表中某个值的第一个匹配项
8 list.reverse()
反向列表中元素
9 list.sort([func])
对原列表进行排序

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.元素赋值

 

1 >>> lis = [1, 'a', 'eric']
2 >>> lis
3 [1, 'a', 'eric']
4 >>> lis[0] = 'python'
5 >>> lis
6 ['python', 'a', 'eric']

 

注意:通过lis[0]= 'python',如果原来位置上有值,会覆盖掉原来的。

2.分片操作

  1)显示序列

 1 >>> lis
 2 ['python', 'a', 'eric']
 3 >>>
 4 >>> lis[1:2]
 5 ['a']
 6 >>> lis[1:]
 7 ['a', 'eric']
 8 >>> lis[:2]
 9 ['python', 'a']
10 >>> lis[:]
11 ['python', 'a', 'eric']

注意:(1)lis[beg:end]将显示列表的从lis[beg]到lis[end-1]的元素,lis[end]不会显示

      (2)lis[beg:end]省略beg,默认beg= 0; 省略end默认end = len(lis)。因此lis[:]显示整个列表。

  2)修改序列

1 >>> lis
2 ['python', 'a', 'eric']
3 >>> lis[1:] = list('hello')
4 >>> lis
5 ['python', 'h', 'e', 'l', 'l', 'o']

  3)插入序列

1 >>> lis
2 ['python', 'h', 'e', 'l', 'l', 'o']
3 >>> lis[2:2] = [1, 2, 3]
4 >>> lis
5 ['python', 'h', 1, 2, 3, 'e', 'l', 'l', 'o']
6 >>> lis[2:2] = 'love'
7 >>> lis
8 ['python', 'h', 'l', 'o', 'v', 'e', 1, 2, 3, 'e', 'l', 'l', 'o']

注意:往lis的某个位置插入列表或字串时,列表的每项、字串的每个字符都会作为lis的一个元素,而不会整体插入。

思考:那作为整体插入咋办?

1 >>> lis2
2 [2, 'x']
3 >>> lis2.insert(1, [7, 8, 9])
4 >>> lis2
5 [2, [7, 8, 9], 'x']
6 >>> lis2.insert(0, 'Hi')
7 >>> lis2
8 ['Hi', 2, [7, 8, 9], 'x']       

  4)删除序列

 1 >>> lis
 2 ['python', 'h', 'l', 'o', 'v', 'e', 1, 2, 3, 'e', 'l', 'l', 'o']
 3 >>> lis.remove('h')
 4 >>> lis
 5 ['python', 'l', 'o', 'v', 'e', 1, 2, 3, 'e', 'l', 'l', 'o']
 6 >>> del lis[-3:]
 7 >>> lis
 8 ['python', 'l', 'o', 'v', 'e', 1, 2, 3, 'e']
 9 >>> lis[2:len(lis)] = []
10 >>> lis
11 ['python', 'h']

3.count函数

  功能:统计列表中某元素出现的次数

1 >>> lis
2 ['python', 'l', 'o', 'v', 'e', 1, 2, 3, 'e']
3 >>> lis.count('e')
4 2

4.len函数

  功能:统计列表中元素的个数

1 >>> lis
2 ['python', 'l', 'o', 'v', 'e', 1, 2, 3, 'e']
3 >>> len(lis)
4 9

5.append函数

  功能:往列表的最后一个位置插入(入栈)操作

1 >>> lis2
2 ['Hi', 2, [7, 8, 9], 'x']
3 >>> lis2.append('bye')
4 >>> lis2
5 ['Hi', 2, [7, 8, 9], 'x', 'bye']

     扩展:可以”+“号 来实现列表的相加

1 >>> a = ['a', 'v']
2 >>> c = ['e', 'w']
3 >>> a + c
4 ['a', 'v', 'e', 'w']

6.extend函数

  功能:修改原序列,链接两个序列产生新的序列

1 >>> a.extend(c)
2 >>> a
3 ['a', 'v', 'e', 'w']
4 >>> c
5 ['e', 'w']

7.insert函数

  功能:将元素插入到列表的指定位置

1 >>> lis2
2 [2, [7, 8, 9], 'x']
3 >>> lis2.insert(0, 'Hi')
4 >>> lis2
5 ['Hi', 2, [7, 8, 9], 'x']

8.pop函数

  功能:删除指定位置元素

 1 >>> lis2
 2 ['Hi', 2, [7, 8, 9], 'x', 'bye']
 3 >>> lis2.pop()
 4 'bye'
 5 >>> lis2
 6 ['Hi', 2, [7, 8, 9], 'x']
 7 >>> lis2.pop(0)
 8 'Hi'
 9 >>> lis2
10 [2, [7, 8, 9], 'x']

  注意:pop(n),n指明在列表中的位置,如果pop(),默认弹出最后一个元素(出栈操作)。

9.remove函数

  功能:删除第一个指定元素

1 >>> lis2
2 [2, [7, 8, 9], 'x']
3 >>> lis2.remove('x')
4 >>> lis2
5 [2, [7, 8, 9]]

  思考:怎样删除所有的指定元素?

1 >>> lis3 = [1, 3, 4, 3, 2, 3]
2 >>> while 3 in lis3:
3 ...     lis3.remove(3)
4 ...
5 >>> lis3
6 [1, 4, 2]

10.index函数

  功能:从列表中找出与某个元素匹配的第一个匹配项的位置

1 >>> lis3 = [1, 3, 4, 3, 2, 3]
2 >>> lis3.index(3)
3 1
4 >>> lis3.index(4)
5 2
6 >>> lis3.index(5)
7 Traceback (most recent call last):
8   File "<stdin>", line 1, in <module>
9 ValueError: 5 is not in list

11.reverse函数

  功能:翻转列表

1 >>> lis3
2 [1, 3, 4, 3, 2, 3]
3 >>> lis3.reverse()
4 >>> lis3
5 [3, 2, 3, 4, 3, 1]

12.sort函数

  功能:队员列表进行排序

1 >>> lis4 = [5, 2, 9, 7, 3]
2 >>> lis4.sort()
3 >>> lis4
4 [2, 3, 5, 7, 9]

  注意:sort函数修改了原序列,这里如果是采用b = a的方式,那么b和a指向同一个列表

 

1 >>> lis4 = [5, 2, 9, 7, 3]
2 >>> lis5 = lis4
3 >>> lis5.sort()
4 >>> lis4
5 [2, 3, 5, 7, 9]
6 >>> lis5
7 [2, 3, 5, 7, 9]

 

 

  思考:那么如何不改变原序列呢?

          方法一:可以利用sorted()函数

1 >>> lis6 = [3, 1, 7, 5]
2 >>> lis7 = sorted(lis6)
3 >>> lis6
4 [3, 1, 7, 5]
5 >>> lis7
6 [1, 3, 5, 7]

          方法二:创建副本

1 >>> lis6
2 [3, 1, 7, 5]
3 >>> lis7 = lis6[:]
4 >>> lis7.sort()
5 >>> lis6
6 [3, 1, 7, 5]
7 >>> lis7
8 [1, 3, 5, 7]

          注意: 对于列表a:

           b = a   那么b和a都指向同一个列表

           b = a[:] 那么吧创建了一个列表副本

   关键字排序:key

   长度(len)排序:

1 >>> lis8 = ['aa', 'abc', 'd', 'etgf', 'werwvadgbd']
2 >>> lis8.sort(key = len)
3 >>> lis8
4 ['d', 'aa', 'abc', 'etgf', 'werwvadgbd']

   关键字排序:reverse()

1 >>> lis6
2 [3, 1, 7, 5]
3 >>> lis6.sort(reverse = True)
4 >>> lis6
5 [7, 5, 3, 1]
6 >>> lis6.sort(reverse = False)
7 >>> lis6
8 [1, 3, 5, 7]

   注意:reverse = True   降序

         reverse = False  升序

13.cmp函数

  在Python3中,被function.cmp_to_key替换

14. set函数

  功能:列出列表中不重复的元素(去重)集合

 

 1 >>> lis3
 2 [3, 2, 3, 4, 3, 1]
 3 >>> lis9 = set(lis3)
 4 >>> lis9
 5 {1, 2, 3, 4}
 6 >>> print(lis9)
 7 {1, 2, 3, 4}
 8 >>> lis9[1]
 9 Traceback (most recent call last):
10   File "<stdin>", line 1, in <module>
11 TypeError: 'set' object does not support indexing

 

 

    注意:利用set() 函数后就变成了集合,集合例元素无序,再利用list2[2]就出错了。

posted on 2016-09-07 21:19  L'E  阅读(92)  评论(0编辑  收藏  举报