Python List类型

Posted forrest-lin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python List类型相关的知识,希望对你有一定的参考价值。

列表是最常用的Python数据类型

创建一个列表

  • 创建一个列表
>>> l = [1, 2, 3, 4, 5 ]
>>> l
[1, 2, 3, 4, 5]
  • 创建一个空列表(方法1)
>>> l = []
>>> l
[]
  • 创建一个空列表(方法2)
>>> l = list()
>>> l
[]
  • 列表不是数组,列表中的数据项不需要具有相同的类型
>>> l = [‘Apple‘, 123, True]
>>> l
[‘Apple‘, 123, True]
  • 把range()产生的内容转换成list,range()的范围是从左边的数字到右边的数字,包含左边的数字,不包含右边的数字
>>> l = list(range(12, 19))
>>> l
[12, 13, 14, 15, 16, 17, 18]

访问列表中的值

  • 使用下标索引来访问列表中的值
>>> l = [‘physics‘, ‘chemistry‘, 1997, 2000]
>>> l[0]
‘physics‘
  • 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界。
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
  • 列表的索引下标是从0开始,表示列表从左向右数第一个数据,即列表第一个数据; 负下标是从-1开始,表示从右向左数,第一个数据,即列表最后一个数据。
>>> l = [1, 2, 3, 4, 5, 6, 7]
>>> l[0]
1
>>> l[-1]
7

更新列表

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

  1. 追加元素至末尾:用append()函数添加:
>>> l = [1,2, 3, 4, 5 ]
>>> l.append(6)
>>> l
[1, 2, 3, 4, 5, 6]
  1. 把元素插入到指定的位置,比如索引号为1的位置:用insert()函数添加:
>>> l = [1,2, 3, 4, 5 ]
>>> l.insert(1, ‘Jack‘)
>>> l
[1, ‘Jack‘, 2, 3, 4, 5]

删除列表元素

  • 可以使用 del 语句来删除列表的元素,del list[i],i为索引位置,如下实例:
>>> l = [‘physics‘, ‘chemistry‘, 1997, 2000]
>>> l
[‘physics‘, ‘chemistry‘, 1997, 2000]
>>> del l[2]
>>> l
[‘physics‘, ‘chemistry‘, 2000]
  • 要删除list末尾的元素,用pop()方法,pop()方法返回值为删除的内容:
>>> l = [1, 2, 3, 4, 5 ]
>>> value = l.pop()
>>> l
[1, 2, 3, 4]
>>> value
5
  • 要删除指定位置的元素,用pop(i)方法,其中i是索引位置,pop(i)方法返回值为删除的内容:
>>> l = [1, 2, 3, 4, 5]
>>> val = l.pop(2)
>>> l
[1, 2, 4, 5]
>>> val
3
  • 还有一个remove() 函数是用于移除列表中某个值的第一个匹配项。
>>> l = [123, ‘xyz‘, ‘zara‘, ‘abc‘, ‘xyz‘]
>>> l.remove(‘xyz‘)
>>> l
[123, ‘zara‘, ‘abc‘, ‘xyz‘]
  • 清空列表元素,用clear()方法,清空列表所有的元素,获得一个空列表
>>> l = [1, 2, 3, 4, 5]
>>> l
[1, 2, 3, 4, 5]
>>> l.clear()
>>> l
[]

替换列表元素

  • 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> classmates = [‘Michael‘, ‘Bob‘, ‘Tracy‘]
>>> classmates[1] = ‘Sarah‘
>>> classmates
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]

双层列表

  • list元素也可以是另一个list,比如:
>>> l = [‘python‘, ‘java‘, [‘asp‘, ‘php‘], ‘scheme‘]
>>> len(l)
4
  • 要注意s只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了:
>>> s = [‘asp‘, ‘php‘]
>>> l = [‘phthon‘, ‘java‘, s, ‘scheme‘]
>>> l
[‘phthon‘, ‘java‘, [‘asp‘, ‘php‘], ‘scheme‘]
  • 要拿到‘php‘可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。
  • 列表的拷贝:
    • 浅拷贝:只拷贝父对象,不会拷贝对象的内部的子对象
      • 方法一:
      >>> a = [1,2,3, [10, 20, 30]]
      >>> b = a.copy()
      >>> a[2] = 77
      >>> a[3][2] = 666
      >>> a
      [1, 2, 77, [10, 20, 666]]
      >>> b
      [1, 2, 3, [10, 20, 666]]
      • 方法二
      >>> import copy
      >>> a = [1,2,3, [10, 20, 30]]
      >>> b = copy.copy(a)
      >>> a[2] = 77
      >>> a[3][2] = 666
      >>> a
      [1, 2, 77, [10, 20, 666]]
      >>> b
      [1, 2, 3, [10, 20, 666]]
    • 深拷贝:拷贝对象及其子对象
    >>> import copy
    >>> a = [1,2,3, [10, 20, 30]]
    >>> b = copy.deepcopy(a)
    >>> a[2] = 77
    >>> a[3][2] = 666
    >>> a
    [1, 2, 77, [10, 20, 666]]
    >>> b
    [1, 2, 3, [10, 20, 30]]

    列表截取(分片操作)

  • 截取的范围,包含左边的下标值,不包含右边的下标值
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[1:4]
[2, 3, 4]
  • 下标值可以不写,如果不写,左边下标值默认为0,右边下标值为最大加一,即表示截取到最后一个数据
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[:]
[1, 2, 3, 4, 5, 6, 7]
>>> l[:4]
[1, 2, 3, 4]
>>> l[2:]
[3, 4, 5, 6, 7]
  • 分片可以控制增长幅度,默认增长幅度为1
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[1:6:1]
[2, 3, 4, 5, 6]
>>> l[1:6:2]
[2, 4, 6]
  • 分片可以为负下标,涨幅也可以为负数
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[-2:-4]
[]
>>> l[-4:-2]
[4, 5]
>>> l[-1:-5:-1]
[7, 6, 5, 4]
>>> l[-1:-5:-2]
[7, 5]
>>> l[::-1]
[7, 6, 5, 4, 3, 2, 1]

列表的遍历

  • for循环遍历列表
>>> l = [1,2,3,4,5]
>>> for i in l:
...     print(i)
... 
1
2
3
4
5
  • while循环遍历列表
>>> a = [1,2,3,4,5,6]
>>> length = len(a)
>>> indx = 0
>>> while indx < length:
...     print(a[indx])
...     indx += 1
... 
1
2
3
4
5
6
  • 双层列表循环
>>> l = [["one", 1, "eins"], ["two", 2,"zwei"], ["three", 3,"drei"] ]
>>> for k,v,w in l:
...     print(k, "--", v, "--",w)
... 
one -- 1 -- eins
two -- 2 -- zwei
three -- 3 -- drei

列表内涵

  • 通过简单方法创作列表
>>> a = [‘a‘, ‘b‘, ‘c‘]
>>> b = [i for i in a]
>>> b
[‘a‘, ‘b‘, ‘c‘]
  • 对列表a中所有元素乘以10, 并生成新的列表
>>> a = [1, 2, 3, 4, 5]
>>> b = [i*10 for i in a]
>>> b
[10, 20, 30, 40, 50]
  • 获取50以内所有的偶数,并生成新的列表
>>> a = range(1, 51)
>>> b = [i for i in a if i % 2 == 0]
>>> b
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
  • 两个列表中所有的元素相加,并输出小于250的数值
>>> a = [i for i in range(1,4)]
>>> a
[1, 2, 3]
>>> b = [i for i in range(100,400) if i % 100 == 0]
>>> b
[100, 200, 300]
>>> c = [  m+n for m in a for n in b]
>>> c
[101, 201, 301, 102, 202, 302, 103, 203, 303]
>>> c = [  m+n for m in a for n in b if m+n < 250]
>>> c
[101, 201, 102, 202, 103, 203]

列表脚本操作符

  • 列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
    • 使用 + 链接两个列表
    >>> a = [1,2,3,4,5]
    >>> b = [5,6,7,8,9]
    >>> d = [‘a‘, ‘b‘, ‘c‘]
    >>> c = a + b + d
    >>> c
    [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, ‘a‘, ‘b‘, ‘c‘]
    • 使用 * 操作列表,相当于把n个列表拼接在一起
    >>> a = [1,2,3,4,5]
    >>> b = a *3
    >>> b
    [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    • 使用 in, 相当于判断元素是否包含在列表中
    >>> a = [1,2,3,4,5]
    >>> 3 in a
    True
    >>> 7 in a
    False

    列表函数

  • cmp(list1, list2) : 比较两个列表的元素
  • len(list) : 返回列表元素的个数
  • max(list) : 返回列表元素的最大值
  • min(list) : 返回列表元素的最小值
  • list(seq) : 将可hash的数据转化为列表

    列表方法:

  • list.append(obj) : 在列表末尾添加新的对象
  • list.count(obj) : 统计某个元素在列表中出现的次数
  • list.extend(seq) :在列表末尾一次性追加另一个序列中的多个值
  • list.index(obj) : 从列表中找到某个值第一个匹配值的索引位置
  • list.insert(index, obj) : 将对象插入列表
  • list.pop(index = -1) : 移除列表中的一个元素(默认是最后一个元素),并且返回改元素的值
  • list.remove(obj) : 移除列表中某个值的第一个匹配项
  • list.reverse() : 反向类表中元素
  • list.sort(cmp = None, key = None, reverse = False) : 对原列表进行排序

    字符串与列表的相互转换

  • 字符串转列表(split()函数)
    • 方法一:
    >>> str1 = "hi hello world"
    >>> str1.split(" ")
    [‘hi‘, ‘hello‘, ‘world‘]
    • 方法二
    >>> str1 = "hi hello world"
    >>> list(str1)
    [‘h‘, ‘i‘, ‘ ‘, ‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘]
  • 列表转字符串(join()函数)
>>> l = ["hi","hello","world"]
>>> " ".join(l)
‘hi hello world‘

以上是关于Python List类型的主要内容,如果未能解决你的问题,请参考以下文章

python 怎么判断list里元素类型

Python内置数据类型list各方法的性能测试

在python 3.6中处理自定义编码时遇到类型错误

Python 数据类型

Python学习总结

python基础(str,list,tuple)