Python 基础数据类型之 list 列表

2018/10/25 Python

列表是一个队列,一个排列整齐的队伍,列表内的个体称作元素,由若干个元素组成列表。

元素可以是任意对象(数字、字符串、对象、列表等)。列表内元素有顺序,可以使用索引获取元素。使用 [] 表示列表。

列表是可变的。

1、列表定义

# 空列表
lst = list()
lst = list[]

# 
lst = [2, 3, 5, "abc"]
lst = list(range(10))

2、列表索引访问

  • 索引也叫下标
  • 正索引:从左至右,从 0 开始为每个元素编号;
  • 负索引:从右至左,从 -1 开始;

正负索引在访问时,不可以超所索引边界,否则引发异常(IndexError)

访问格式:

# index 就是索引,使用中括号访问
list[index] 

2.1 列表查询

  • list.index(value,[start,[stop]]) 通过 value ,从指定区间查找列表内的元素是否匹配,匹配第一个就立即返回索引,匹配不到,抛出异常 ValueError。
In [3]: lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'abc', '123', 'a']

In [4]: lst.index('abc')
Out[4]: 8

In [5]: lst.index('abc',2,10)
Out[5]: 8

In [6]: lst.index('a',2,10)
Out[6]: 7
  • list.count(value) 返回列表中匹配 value 的次数
In [7]: lst.count('a')
Out[7]: 3
  • len() 返回列表元素的个数
In [8]: len(lst)
Out[8]: 11

2.2 列表元素修改

  • list[index] = value
In [9]: names = ['tom', 'jerry', 'bruce']

In [10]: names[1]
Out[10]: 'jerry'

In [11]: names[1] = 'kent'

In [12]: names
Out[12]: ['tom', 'kent', 'bruce']

2.3 列表增加插入元素

  • list.append(value)

列表尾部追加元素,返回 None 。 返回 None 就意味着没有新的列表产生,就地修改。

In [13]: names
Out[13]: ['tom', 'kent', 'bruce']

In [14]: names.append('Jessie')

In [15]: names
Out[15]: ['tom', 'kent', 'bruce', 'Jessie']
  • list.insert(index, object)

在指定的索引 index 处插入元素 Object 返回 None,返回 None 就意味着没有新的列表产生,就地修改。

In [16]: names
Out[16]: ['tom', 'kent', 'bruce', 'Jessie']
# 在索引 2 的地方插入一个元素 Obama
In [17]: names.insert(2, 'Obama')

In [18]: names
Out[18]: ['tom', 'kent', 'Obama', 'bruce', 'Jessie']
    • list

连接操作,将两个列表连接起来,返回一个新的列表,原列表不变。

In [22]: names1 = ['Obama', 'Tom']

In [23]: names2 = ['Jerry', 'Bruce']

In [24]: names1 + names2
Out[24]: ['Obama', 'Tom', 'Jerry', 'Bruce']
    • list

重复操作,将本列表元素重复n次,返回新的列表

In [25]: names1
Out[25]: ['Obama', 'Tom']

In [26]: names1 * 2
Out[26]: ['Obama', 'Tom', 'Obama', 'Tom']

2.4 列表删除元素

  • list.remove(value)

从左至右查找第一个匹配 value 的值,移除该元素,返回 None 。

In [29]: names = ['Tom', 'Jerry', 'Bruce', 'Obama']

In [30]: names.remove('Bruce')

In [31]: names
Out[31]: ['Tom', 'Jerry', 'Obama']
  • list.pop([index])

不指定索引index,就从列表尾部弹出一个元素。指定索引 index,就从索引处弹出一个元素,索引超界抛出 IndexError 错误。

In [39]: names = ['Tom', 'Jerry', 'Bruce', 'Obama']

In [40]: names.pop(0)
Out[40]: 'Tom'

In [41]: names
Out[41]: ['Jerry', 'Bruce', 'Obama']

In [42]: names.pop()
Out[42]: 'Obama'

In [43]: names
Out[43]: ['Jerry', 'Bruce']

2.5 列表其它操作

  • list.reverse() 将列表元素反转,返回 None。就地修改
In [1]: names = ['Tom', 'Jerry', 'Obama']

In [2]: names
Out[2]: ['Tom', 'Jerry', 'Obama']

In [3]: names.reverse()

In [4]: names
Out[4]: ['Obama', 'Jerry', 'Tom']
  • reversed()

reversed() 内置函数返回一个可迭代对象,不改变原对象。

In [7]: names
Out[7]: ['Obama', 'Jerry', 'Tom']

In [8]: L1 = reversed(names)

In [9]: L1
Out[9]: <list_reverseiterator at 0x10e5cb860>

In [10]: for i in L1:
    ...:     print(i)
Tom
Jerry
Obama
  • sort(*, key=None, reverse=False)

对列表元素进行排序,就地修改,默认升序。 reverse 为 True,反转,降序 key 一个函数,指定 key 如何排序

In [32]: nums = [1, 22, 3, 6, 2, 11]

In [33]: nums.sort(key=int)

In [34]: nums
Out[34]: [1, 2, 3, 6, 11, 22]

# 加上 reverse=True 反转,降序
In [35]: nums.sort(key=int, reverse=True)
In [37]: nums
Out[37]: [22, 11, 6, 3, 2, 1]

3、列表复制

  • 浅拷贝

影子拷贝,也叫浅拷贝,遇到引用类型,只复制引用(门牌号)。

import copy
lst = copy.copy(list)

示例:创建一个列表如下

-w670

使用浅拷贝将 tests 列表拷贝给 L1

-w687

此时 L1 列表内的元素和 tests 内容一样;接下来修改 L1元素中的第1个元素为 88 然后查看两个列表的变化

-w609

接下来修改 L1 列表中嵌套的列表中的元素在查看变化

-w573

通过测试发现当修改 L1[2][0] 这个元素的值以后,tests 列表中的该元素也改变了。


浅拷贝

  • 深拷贝
import copy
lst = copy.deepcopy(list)

使用深拷贝,创建一个 L2 列表,然后将 L2[2][0] 修改回 ‘a’ 而后在打印两个列表的元素。

-w686


【小结】

  • 浅拷贝影响源对象
  • 深拷贝不会影响源对象

4、列表练习题

  • 写出一段Python代码实现删除一个list里面的重复元素
# 写出一段Python代码实现删除一个list里面的重复元素
names = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D']

print("删除前 ", names)
for i in names:
    while names.count(i) >= 2:
        names.remove(i)
print("删除后 ", names)

Search

    Table of Contents