第五弹 python的数据类型 之 列表 list

简介:

以方括号标注,逗号分隔的一组值,列表可以包含不同类型的元素;但一般情况下,各元素的类型相同;列表是有序集合,支持切片和索引;是可变的;
列表的索引从0开始,第一个列表元素的索引为0。

操作

拷贝

1. 赋值操作

格式:

l1 = l

l和l1都是指向同一个列表

例子:

l = [1, 2, 3, 4]
l1 = 1
# id(l1): 140534014646528
# id(l): 140534014646528

2. 使用索引

格式:

l1 = l[:]

同时省略开始索引和结束索引,可以创建一个包含整个列表的切片;首先创建一个列表l的副本,再将该副本赋值给l1

例子:

l = [1, 2, 3, 4]
l1 = l[:]
# id(l1): 140533986418304
# id(l):  140534014646528

3. 列表生成式

格式:

l1 = [i for i in l]

基于其他迭代器创建列表;将整个输出列表加载到内存中,对于中小型列表,它可以使操作更快。

例子:

l = [1, 2, 3, 4]
l1 = [i * 10 for i in l]

4. 使用copy

格式:

list.copy()

复制列表,返回复制后的新列表;类似于list[:]

例子:

l = ['python', 'golang', 'javascript', 'baidu']
l2  = l.copy()
# ['python', 'golang', 'javascript', 'baidu']

5. 使用list

格式:

list(iterable)

转换为列表;返回一个新的列表;

例子:

l = [1, 2, 3, 4]
l2 = list(l)
# [1, 2, 3, 4]

切片

格式:

list[start : stop : step]
  • start:开始下标,默认为0
  • stop:结束下标,默认为列表末尾
  • step:步长;默认为1

区间范围:[start, stop);

例子:

>>> l = [1, 2, 3, 4, 5, 6]
>>> l[0:3:2]
[1, 3]
>>> l[:2:-1]
>>> l
[6, 5, 4]

列表推导式

列表推导式创建列表的方式更简洁。对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;
列表推导式的方括号内包含以下内容:一个表达式,后面一个for子句,然后是零个或多个forif子句。结果是由表达式forif子句求值计算而得出的一个新列表;

1. 简单模式

l = [1, 2, 3]
l2 = [x for x in l]

2. 嵌套模式

m = [[1,2,3,4], [5,6,7,8], [9,10,11,12]]
[[r[i] for r  in m] for i in range(4)]
# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

添加元素

1. 在末尾追加一个元素

格式:

list.append(x)

在列表末尾追加一个元素

例子:

l = [1, 2, 3, 4]
l.append(5)
# [1, 2, 3, 4, 5]

2. 在末尾追加多个元素

格式:

list.extend(iterable)

在列表末尾一次性追加另一个序列中的多个值

例子:

l = [1, 2, 3, 4]
l.extend([100, 200, 300])
# [1, 2, 3, 4, 100, 200, 300]

3. 在指定位置插入

格式:

list.insert(i, x)

在制定位置插入元素。第一个参数为插入元素的索引;第二个参数为插入的值

例子:

l = [1, 2, 3, 4]
l.insert(0, 5)
# [5, 1, 2, 3,  4]

移除元素

1. 通过del删除

格式:

del list[i]

通过del语句和列表对应的索引,执行删除操作;del语句不仅可以通过索引删除指定元素,还可以通过清除切片以及清空整个列表;同样也可以使用del删除整个变量,删除之后再次引用此变量,会触发异常;

例子:

l = [1, 2, 3, 4, 5]
del l[1]
#[1, 3, 4, 5]

del l[:2]
#[4, 5]

del l[:]
#[]

del l

2. 移除指定值的元素

格式:

list.remove(x)

移除列表中第一个匹配到的值为 的元素;如果要删除的值在列表中出现多次,则需要循环删除。未找到元素则会触发ValueError异常

例子:

l =  [1, 2, 3, 4, 5]
l.remove(1)
# [2, 3, 4, 5]

3. 移除指定位置的元素

格式:

list.pop([i])

删除列表中指定位置的元素,并返回被删除的元素。未指定位置时,list.pop()删除并返回列表最后一个元素;

如果列表为空 或 指定的索引超出范围,则会触发IndexError异常;

例子:

>>> l = [1, 2, 3, 4, 5]
>>> l.pop()
5
>>> l
[1, 2, 3, 4]
>>> l.pop(2)
3
>>> l
[1, 2, 4]

4. 删除所有元素

格式:

list.clear()

删除列表里所有的元素,相当于del list[:]

例子:

l = [1, 2, 3, 4, 5]
l.clear()
# []

查找元素所在索引

格式:

list.index(x[, start[, end]])

查找列表中某个元素第一个匹配项的索引位置;如果未查询到,则会触发ValueError异常

例子:

l = [1, 2, 3, 4, 5]
l.index(2)
# 1

元素出现次数

格式:

list.count(x)

返回列表中元素x出现的次数;

例子:

l = ['a', 'e',  'a', 'c']
l.count('a')
# 2

排序

1. sort对列表永久排序

格式:

list.sort(*, key=None, reverse=Falsse)

直接对原列表进行排序,没有返回值;如果指定参数,则使用比较函数指定的比较函数进行排序

  • key:主要用来进行比较的元素,只有一个参数,具体的函数的参数就取自于可迭代对象中,指定迭代对象中的一个元素来进行排序;
  • reverse:排序规则;True:降序;False:升序;

例子:

l = ['123', 'abc',  'python', 'Golang', 't']
l.sort()
# ['123', 'Golang', 'abc', 'python', 't']

l.sort(reverse=True)
# ['t', 'python', 'abc', 'Golang', '123']

l = [(1, 2), (5, 10), (2, 11), (100, 4)]
l.sort(key=lambda x: x[0])
# [(1, 2), (2, 11), (5, 10), (100, 4)]

2. sorted临时排序

格式:

sorted(iterable, /, *, key=None, reverse=False)

对所有可迭代对象进行排序操作;返回重新排序的列表,不影响原列表的顺序;原列表顺序不变;

  • key:主要用来第进行比较的元素进行处理,只有一个参数,可以是一个函数,也可以是一个类。通过key对迭代对象中的元素进行处理,用处理后的值进行排序;
  • reverse:排序规则;True:降序;False:升序;
    例子:

例子:

l = ['123', 'abc',  'python', 'Golang', 't']
sorted(l)
# l1: ['123', 'Golang', 'abc', 'python', 't']
# l: ['123', 'abc',  'python', 'Golang', 't']

3. 翻转列表

格式:

list.reverse()

翻转列表中的元素

例子:

l = ['a', 'd', 'f', 'e', 'u']
l.reverse()
# ['u', 'e', 'f', 'd', 'a'

### Python List 数据结构详解 #### 使用方法与特性 Python 的 `list` 是一种可变序列类型,可以容纳不同类型的对象。列表支持动态调整大小,在内存管理上较为灵活[^1]。 - **创建列表** 列表可以通过方括号 `[ ]` 来定义,并且可以在其中放置任意数量的项,项之间用逗号分隔。 ```python my_list = ['apple', 'banana', 'cherry'] ``` - **访问元素** 可以通过索引来获取特定位置上的元素,第一个元素的位置为0;也可以使用负数索引从最后一个元素向前计数(-1表示最后一个元素)。 ```python first_item = my_list[0] # 获取第一个元素 last_item = my_list[-1] # 获取最后一个元素 ``` - **修改元素** 支持直接通过指定索引来更改某个位置处的内容 ```python my_list[1] = 'blueberry' # 修改第二个元素 ``` - **添加新元素** 提供了多种方式来向现有列表追加新的成员,比如 append() 方法会在列表末尾增加一项; ```python my_list.append('date') # 添加到列表最后面 ``` - **删除元素** pop() 函数可以从列表中移除并返回指定位置的项目,默认情况下会出最后一项。 ```python removed_element = my_list.pop(2) # 移除第三个元素并将之赋给变量 removed_element ``` #### 常见操作示例 下面是一些关于如何对 python list 进行常见操作的具体例子: - **切片(slice)**:提取子列表的一部分而不改变原列表内容。 ```python sublist = my_list[1:3] # 创建包含第二至第三位元素的新列表 ``` - **长度(len())**:获得当前列表内含有的总条目数目。 ```python length_of_my_list = len(my_list) # 计算列表中的元素总数 ``` - **查找(in / not in)**:判断某值是否存在于列表之中。 ```python if 'apple' in my_list: print("Apple is found.") else: print("Apple isn't here.") ``` - **连接(concatenation)+复制(multiplication)**:两个列表相加形成一个新的更长列表;乘法运算符 *n* 将重复 n 次相同列表内的所有元素生成一个更大的列表。 ```python combined_lists = [1, 2, 3] + [4, 5, 6] # 合并两个列表 repeated_elements = ['a'] * 5 # 复制单个字符五次得到五个'a' ``` - **排序(sort()/sorted())**:sort() 对原始列表就地排序而 sorted() 返回已排序版本但保持源不变。 ```python numbers = [7, 9, 8] numbers.sort() # 排序原有列表 new_sorted_numbers = sorted([3, 1, 2]) # 不影响输入参数而是产生有序副本 ``` #### 高级特性和注意事项 除了上述基础功能外,Python lists 还具备一些额外的特点和需要注意的地方: - **多维数组模拟**: 虽然 Python 并无专门针对矩阵的支持,但是嵌套列表能够很好地模仿二维甚至更高维度的数据布局形式. ```python matrix_example = [[row_index]*column_count for row_index in range(rows)] # 构建行列式的表格结构 ``` - **性能考量**: 当频繁执行插入或删除动作时应考虑其他更适合的数据容器如 deque (双端队列),因为对于常规列表而言这类操作效率较低. 综上所述,Python 中的 list 类型是一个极其重要且实用的数据组织工具,掌握其工作原理有助于编写更加高效简洁的程序代码.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值