我是这样学习Python列表的!

作者: 14e61d025165 | 来源:发表于2019-06-02 14:55 被阅读0次
  1. 列表

不同于 C++ 和 Java,在 Python 中,没有在标准库中内置数组类型,而是通常利用列表来表示数组,同时它也比数组的使用要灵活得太多。

列表是 Python 中最基本的数据结构,列表中的元素的存储是有序的,所以我们可以直接利用索引去访问列表中的值。在学习数据结构时,我们知道,对一个数据结构的操作,无外乎增删改查四种。接下来本文将从这四个方面来介绍列表的一些常用小技巧。

1.1. 列表中的增

Python学习交流群:1004391443,这里有资源共享,技术解答,还有小编从最基础的Python资料到项目实战的学习资料都有整理,希望能帮助你更了解python,学习python

对列表的增加操作有两种,一种是创建一个新的列表,一种是在一个已有的列表中增加一个新元素。我们首先介绍如何创建一个新的列表:

创建一个空列表

list1 = []

创建一个默认值为0,长度为n的列表

list2 = [0] * n

利用列表生成式创建列表

list3 = [i for i in range(10)]

5*5 二维列表

list4 = [[i for i in range(5)] for j in range(5)]

利用其他数据结构生成列表, list() 函数接收一个可迭代对象作为参数

tuple1 = (1, 2, 3)
list5 = list(tuple1)

字符串转化为列表

str1 = "I love code"

每个元素作为列表中的一个元素

list6 = list(str1)

按照指定字符分割

list7 = str1.split(" ") # ['I', 'love', 'code']
在编程过程中,有时我们需要对一个列表进行操作,但是列表是一个可变对象,对列表的操作往往会改变其本来的顺序结构。因此,当我们不想改变列表原有的顺序结构,我们需要对旧的列表进行一个拷贝,然后在新的列表上进行操作。拷贝存在两种,浅拷贝和深拷贝。可能有人会对这两种拷贝存在疑问,他们得到的列表的形式不是一样的嘛?

是的,它们在拷贝后得到的列表形式确实是一样的。但是在进行操作时,就会有很大的差别了,特别是当你的列表中存在可变对象时。我们只需要记住一点,浅拷贝只复制不可变对象,而深拷贝不仅复制不可变对象,还复制了可变对象。以下进行举例说明:

如果一个列表中的元素都是不可变对象,可以直接用浅拷贝

list1 = [1, 2, 'i']
list2 = list1[::1] # 浅拷贝
list3 = [i for i in list1] # 浅拷贝
import copy
list4 = copy.copy(list1) # 浅拷贝

如果一个列表中的元素包含可变对象,要完成复制列表,需要用深拷贝

list5 = ["Will", 1, ["Python", "Java", "C++"]]
list6 = copy.deepcopy(list5)
为什么在包含不可变对象的时候,需要用到深拷贝呢?

上面我们说过,浅拷贝只拷贝不可变对象。当列表中存在可变对象时,我们可以发现其引用 id 是一样的,即它们是同一个对象,因此对 list5 的操作会影响到 list6 。而在深拷贝中,对于可变对象,在拷贝的新列表中会生成一个新的对象,所以对 list6 的修改不会影响到 list5 。

id(list5[2]) # 2195936916360
id(list6[2]) # 2195936916744
对列表的另一种增加操作就是在已有的列表的基础上增加元素了,主要包括以下几种操作:

list1 = ["I"]

在列表尾部增加一个新元素

list1.append("love")

合并两个列表

list2 = ["Apple", 3]
list1.extend(list2) # ["I", "love", "Apple", 3]
list1 = list1 + list2 # ["I", "love", "Apple", 3]

在指定位置插入元素

list1.insert(index=1, "not") # ["I", "not", "love", "Apple", 3]
1.2. 列表中的删

对数据结构的删除操作包括两种,删除整个列表,或者删除列表中的某些元素。对于从内存中删除整个列表,该操作十分简单:

list1 = [1, 2, 3]
del list1
对于删除列表中的元素,同样可以使用 del 语句,同时还可以使用 remove() 函数。

list1 = [1, 2, 3]
print(list1) # [1, 2, 3]
del list1[1]
print(list1) # [1, 3]

移除某个值的第一匹配项

list2 = [1, 2, 2, 3, 5]
list2.remove(2) # 移除第一个值为 2 的元素
1.3. 列表中的改

修改操作即在原有的列表的基础上对其进行修改,上面以及介绍了增加和删除操作,这里就对不改变元素的个数的操作进行介绍,主要包括排序和反转列表等。

对一个整数列表进行排序

list1 = [9, 5, 6, 2, 7, 1, 3]

升序排列

list1.sort() # [1, 2, 3, 5, 6, 7, 9]
list1 = sorted(list1) # [1, 2, 3, 5, 6, 7, 9]

降序排列

list1.sort(reverse=True) # [9, 7, 6, 5, 3, 2, 1]
list1 = sorted(list1, reverse=True) # [9, 7, 6, 5, 3, 2, 1]

指定键值排序

list1 = [('a', 3), ('b', 2), ('c', 1)]
list1.sort(key=lambda x:x[1]) # [('c', 1), ('b', 2), ('a', 3)]

反转列表,即将原来的列表逆序排列

list2 = [4, 2, 3, 1]
list2 = list2[::-1] # [1, 3, 2, 4]
list2.reverse() # [1, 3, 2, 4]
1.4. 列表中的查

对列表的查找操作无外乎以下几种:

遍历列表;
查找指定索引的元素;
查找指定值的元素;
列表的遍历方式有三种,分别是根据索引遍历、根据值遍历和 enumerate() 遍历。

list1 = ["Python", "C++", "Java"]

方法 1

for i in range(len(list1)):
print(list1[i])

方法 2 , 遍历速度最高效,但是无法记录索引

for i in list1:
print(i)

方法 3

for index, val in enumerate(list1):
print(val)
查找元素有两种,一种是按照索引查找,一种是遍历按值查找。

查找指定索引的元素

list1 = [1, 3, 2, 5, 7, 8]
list1[3] # 返回索引为 3 的元素,值为5

查找指定值的元素

key = 5
for i in list1:
if i == key:
print("OK")

查找最大元素和最小元素

max(list1) # 8
min(list1) # 1
1.5. 其它小技巧

上述介绍了列表的增删改查四种常用操作,当然对列表的操作不仅仅只有这些,例如还有两个列表的比较,列表结构的转化等等。

比较两个列表是否是一样的,这里的前提条件是这两个列表对象不是同一个对象。

list5 = [("car", 1), ("bike", 2), ("foot", 3)]
list6 = [("car", 1), ("bike", 2), ("foot", 3)]

判断两个列表是否是同一个对象

list5 is list6 # False

判断两个列表是否相等

list5 == list6 # True

当列表中的元素很多,且结构复杂时,可以使用 numpy 模块

import numpy as np
a = np.array(list5)
b = np.array(list6)
(a == b).all() # True
列表结构的转化主要包括将列表转化为元组、集合、字符串和字典:

list1 = ["a", "b", "c", "d", "c"]

列表转化为元组

tuple1 = tuple(list1) # ('a', 'b', 'c', 'd', 'c')

列表转化为集合

set1 = set(list1) # {'a', 'b', 'c', 'd'}

列表转化为字符串

str1 = "".join(list1) # 'abcdc'

列表转化为字典,元素为 key, 次数为 value

from collections import Counter, defaultdict
dict1 = Counter(list1) # Counter({'a': 1, 'b': 1, 'c': 2, 'd': 1})

或者

dict2 = defaultdict(int)
for i in list1:
dict2[i] += 1
dict2 # defaultdict(int, {'a': 1, 'b': 1, 'c': 2, 'd': 1})

相关文章

  • 我是这样学习Python列表的!

    列表 不同于 C++ 和 Java,在 Python 中,没有在标准库中内置数组类型,而是通常利用列表来表示数组,...

  • python--深浅拷贝

    python学习中,有这样一个问题,列表的拷贝。当列表有嵌套列表时候,那么在进行复制拷贝的时候就会产生内列表的元素...

  • Python之数据集合

    今天要学习的是Python中的数据集合类,废话不多说,直接开始。 1.列表(list) 列表 是Python内置的...

  • Python学习打call第七天:列表

    今天要学习的是Python的列表,主要学习一下什么是列表、列表的可变性、列表的访问、列表的增删改查等操作哦~ 1....

  • python每天进步一点点(5)

    python 大大的图 我的图 今天学习的是 修改 添加 删除 列表中的元素 1,修改列表元素 修改列表元素的语法...

  • python实现遗传算法遇到的问题

    第一篇文章,记录学习的过程~ ``` python #产生自然数列表 a=range(5) #这样是错误的...

  • 2018-06-29

    python学习 学习python字符串、列表、元组、字典、日期和时间模块

  • 我是这样学习python的

    其实无论是学习什么,都需要明确自己学习它的目的,找到方向再去逐一攻破。 一般我学习都会有以下过程:这里拿我学习py...

  • 【Python】列表简介 - 作用和格式

    Python列表学习主要学习以下5大点,分别是列表的应用场景、列表的格式、列表的常用操作、列表的循环遍历,列表的嵌...

  • python-第十一课-列表

    A.学习内容 本节课主要学习掌握python中使用最频繁的数据类型——列表(List)。 B.列表 列表是由一系列...

网友评论

    本文标题:我是这样学习Python列表的!

    本文链接:https://www.haomeiwen.com/subject/vsyxxctx.html