VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • Python 列表的重要操作

列表是python中内置的数据结构,它的表现形式为方括号中不同数据的集合,用逗号分隔开。列表可以用来存储相同数据类型或不同数据类型。

列表是可变的,这也是它如此常用的原因,然而在某些情况下,可变性需要特别注意。

本文介绍了关于python 列表的重要操作,帮助你更好的掌握列表。

1.从列表删除元素的三种方法

(1)del

del可以根据索引位置,删除某个元素,也可以设定索引范围删除,亦可以删除整个列表,没有返回值

删除单个元素

a = [1, 2, 'x', 4, 5]
del(a[0])
print(f'a is {a}')

输出

a is [2, 'x', 4, 5]

范围删除元素

a = [1, 2, 'x', 4, 5]
del (a[0:2])
print(f'a is {a}')

输出

a is ['x', 4, 5]

删除整个列表

复制代码
a = [1, 2, 'x', 4, 5]
del (a[:])
print(f'a is {a}')
# 使用切片按索引范围删除整个列表的元素,将输出一个空列表a is []

a = [1, 2, 'x', 4, 5]
del (a)
print(f'a is {a}')
# name 'a' is not defined 没有返回值,报错找不到对象
复制代码

(2)remove

remove()函数用于移除列表中某个值的第一个匹配项,没有返回值

例子

a = [1, 2, 'x', 4, 5,]
a.remove('x')
print(f'a is {a}')

输出

a is [1, 2, 4, 5]

注意:只会删除第一个匹配值,如有重复将不会删除

 

a = [1, 2, 'x', 4, 5,'x']
a.remove('x')
print(f'a is {a}')

输出:

a is [1, 2, 4, 5, 'x']

(3)pop

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

例子

a = [1, 2, 'x', 4, 5]
b = a.pop()
print(f'a is {a}')
print(f'b is {b}')

输出

a is [1, 2, 'x', 4]
b is 5

我们可以指定删除元素的索引值,不能超过列表总长度。

a = [1, 2, 'x', 4, 5]
b = a.pop(0)
print(f'a is {a}')

输出

a is [2, 'x', 4, 5]

2.列表的添加,扩展,插入

(1)append

append() 函数用于在列表末尾添加新的对象。

a = [1, 2]
a.append(3)
print(a)

输出

[1, 2, 3]

可以是任何数据类型,被追加的元素在列表中保持着原结构类型

a = [1, 2]
b = ['x', 'y', 'z']
a.append(b)
print(a)

输出

[1, 2, ['x', 'y', 'z']]

列表b成为了列表a中的第三项,如果你想创建一个列表是a,b列表中元素的组合a =(1, 2, 'x', 'y', 'z'),则需要使用extend()函数或者"+“。

(2)extend

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

a = [1, 2]
b = ['x', 'y', 'z']
a.extend(b)
print(a)

输出

[1, 2, 'x', 'y', 'z']

(3)insert

insert() 函数也用于向列表中添加元素。但是,它允许指定新元素的索引。例如,我们可以在列表的开头添加一个新元素

a = [1, 2, 3, 4, 5]
a.insert(0, 'a')
print(a)

输出

['a', 1, 2, 3, 4, 5]

insert()中的第一个参数是索引,第二个是插入的对象

3.用”=“复制列表

我们可以复制一个列表并创建一个新的变量。

a = [1, 2, 3]
b = a
print(b)

但是,新变量“ b”只是指向“ a”值的指针。 因此,a的任何变化也会改变b。 让我们添加一个值来确认。

a = [1, 2, 3]
b = a
a.append(4)
print(a)
print(b)

输出

[1, 2, 3, 4]
[1, 2, 3, 4]

4.使用切片复制列表

我们可以使用切片选择列表的所有索引来复制列表。

a = [1, 2, 3]
b = a[:]
print(b)

新的列表b包含与a相同的值,但在不同的内存位置。如果我们改变a,b不会受到影响。

a = [1, 2, 3]
b = a[:]
a.append(4)
print(a)
print(b)

输出

[1, 2, 3, 4]
[1, 2, 3]

使用copy()函数复制列表的工作原理与使用索引复制相同。

a = [1, 2, 3]
b = a.copy()
a.append(4)
print(a)
print(b)

输出

[1, 2, 3, 4]
[1, 2, 3]

5. 用sort()和sorted()对列表进行排序。

sort和sorted函数都可以用来对列表进行排序。

  • sort():对列表进行排序,但不返回任何内容。
  • sorted():返回列表的排序副本,但不对原始列表进行排序。

sort()

a = [2, 0, 4, 3]
b = a.sort()
print(a)
print(b)

输出

[0, 2, 3, 4]
None

用sorted()函数做同样的例子。

a = [2, 0, 4, 3]
b = sorted(a)
print(a)
print(b)

输出

[2, 0, 4, 3]
[0, 2, 3, 4]

6. 通过复制创建嵌套列表

在通过复制创建一个嵌套的列表时,我们需要注意元素的变化。原列表元素的任何修改都会改变被复制的列表。

复制代码
a = [1, 2]
b = ['x', 'y']
c = [a, b]
a.append(3)
b.pop()
print(a)
print(b)
print(c)
复制代码

列表c由列表a和列表b组成,我们通过添加和删除一个元素更新了列表a和列表b。因此,列表c也被更新了。

输出

[1, 2, 3]
['x']
[[1, 2, 3], ['x']]

7、迭代过程中修改列表需要注意的

列表是可迭代的对象,因此通常在循环中使用它们。迭代基于索引,因此如果在迭代时更新列表,则需要注意。

下面的代码。 我们的需求是,如果a列表中同样的元素也位于列表b中,它将删除该项目。

复制代码
a = ['x', 'y', 'z', 't']
b = ['x', 'y', 'u', 'v']
for item in a:
   if item in b:
      a.remove(item)
      print (a)
      print (b)
复制代码

执行代码后,我们希望列表a变为[‘z’,‘t’]。看看实际发生了什么。

['y', 'z', 't']
['x', 'y', 'u', 'v']

为什么'y'没有被删除呢?原因是循环执行第一步删除’x'时,列表的索引会同步更新。列表a中的a[1]索引变成了'z',for循环会比较列表中的第二个元素,比较的是'z'和‘y‘。因此'y'就没被删除

8、列表推导式(List comprehensions)

列表推导式提供了一种简明扼要的方法来创建列表。列表推导式的语法比for循环更简洁,执行效率也更高。

语法

list = [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

if不是必须的,可以省略
简单的示例,让b列表中只包含a列表的偶数元素

a = [1, 2, 4, 5, 7, 9, 11]
b = [x for x in a if x % 2 == 0]
print (b)
# [2,4]

等价于

for item in a:
   if item % 2 == 0:
      b.append(item)

1行代码总要比三行更简洁吧~~
 

9.嵌套列表的列表推导式

我们可以在列表推导式中对嵌套列表进行迭代,比如有以下列表

vals = [[1,2,3],[4,5,2],[3,2,6]]

我们想得到嵌套列表中的每个元素,需要的输出为

vals_exp = [1,2,3,4,5,2,3,2,6]

用列表推导式来实现

vals = [[1,2,3],[4,5,2],[3,2,6]]
vals_exp = [y for x in vals for y in x]
print (vals_exp)
# [1, 2, 3, 4, 5, 2, 3, 2, 6]

如果执行流程不够明确的话,可以先尝试用for循环操作,以下是对比流程图

总结:

列表与元组的用法,结构都很类似。区别主要有

1. 列表是动态的, 长度可变, 可以随意的增加、删减或改变元素, 列表的存储空间略大于元组, 性能略差与元组

2. 元组是静态的, 长度大小固定, 不可以对元素进行增加、删减或改变操作, 元组相对于列表更加轻量级, 性能稍优
 

出处:https://www.cnblogs.com/Jabami-Yumeko/p/13944805.html


相关教程