我就是这样学习Python中的列表

1. 列表

对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且python的列表是比较强大的,它包含了很多不同类型的数据:整型数字,浮点型,字符串以及对象等。

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

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

1.1. 列表中的增

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

# 创建一个空列表
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})

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • python提取字典key列表的方法

    本文实例讲述了python提取字典key列表的方法.分享给大家供大家参考.具体如下: 这段代码可以把字典的所有key输出为一个数组 d2 = {'spam': 2, 'ham': 1, 'eggs': 3} # make a dictionary print d2 # order is scrambled print d2.keys() # create a new list of my keys 希望本文所述对大家的Python程序设计有所帮助.

  • Python中将字典转换为列表的方法

    说明:列表不可以转换为字典 ①转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()) print('字典中的key转换为列表:', key_value) #字典中的value转换为列表 value_list = list(a.values()) print('字典中的value转换为列表:', value_list) 运行结果: ②转换后的列表为有序列表 import collecti

  • Python去除列表中重复元素的方法

    本文实例讲述了Python去除列表中重复元素的方法.分享给大家供大家参考.具体如下: 比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还有一种据说速度更快的,没测试过两者的速度差别 l1 = ['b','c','d','b','c','a','a'] l2 = {}.fromkeys(l1).keys() print l2 这两种都有个缺点,祛除重复元素后排序变了: ['a', 'c',

  • Python中列表元素转为数字的方法分析

    本文实例讲述了Python中列表元素转为数字的方法.分享给大家供大家参考,具体如下: 有一个数字字符的列表: numbers = ['1', '5', '10', '8'] 想要把每个元素转换为数字: numbers = [1, 5, 10, 8] 用一个循环来解决: new_numbers = []; for n in numbers: new_numbers.append(int(n)); numbers = new_numbers; 有没有更简单的语句可以做到呢? 1. numbers =

  • 在Python的列表中利用remove()方法删除元素的教程

    remove()方法从列表中删除第一个obj. 语法 以下是remove()方法的语法: list.remove(obj) 参数 obj -- 这是可以从列表中移除该对象 返回值 此方法不返回任何值,但从列表中删除给定的对象 例子 下面的例子显示了remove()方法的使用 #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc', 'xyz']; aList.remove('xyz'); print "List : ", aList;

  • Python列表list数组array用法实例解析

    本文以实例形式详细讲述了Python列表list数组array用法.分享给大家供大家参考.具体如下: Python中的列表(list)类似于C#中的可变数组(ArrayList),用于顺序存储结构.   创建列表 复制代码 代码如下: sample_list = ['a',1,('a','b')] Python 列表操作 复制代码 代码如下: sample_list = ['a','b',0,1,3] 得到列表中的某一个值 复制代码 代码如下: value_start = sample_list

  • python比较两个列表是否相等的方法

    本文实例讲述了python比较两个列表是否相等的方法.分享给大家供大家参考.具体如下: 这里演示了 == 和 is两种方法的区别: L1 = [1, ('a', 3)] # same value, unique objects L2 = [1, ('a', 3)] print L1 == L2, L1 is L2 # equivalent?, same object? 运行结果如下: True False 希望本文所述对大家的Python程序设计有所帮助.

  • Python字符串、元组、列表、字典互相转换的方法

    废话不多说了,直接给大家贴代码了,代码写的不好还去各位大侠见谅. #-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type 'str'> {'age': 7, 'name': 'Zara', 'class': 'First'} print type(str(dict)), str(dict) #字典可以转为元组,返回:('age', 'name', 'class

  • Python 列表(List)操作方法详解

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表和元组.序列都可以进行的操作包括索引,切片,加,乘,检查成员.此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 一.创建一个列表只要把逗号分隔的不同的数据项使用方括号括起来即可.如下所示: 复制代码 代码如下: list1

  • Python统计列表中的重复项出现的次数的方法

    本文实例展示了Python统计列表中的重复项出现的次数的方法,是一个很实用的功能,适合Python初学者学习借鉴.具体方法如下: 对一个列表,比如[1,2,2,2,2,3,3,3,4,4,4,4],现在我们需要统计这个列表里的重复项,并且重复了几次也要统计出来. 方法1: mylist = [1,2,2,2,2,3,3,3,4,4,4,4] myset = set(mylist) #myset是另外一个列表,里面的内容是mylist里面的无重复 项 for item in myset: prin

随机推荐