Python基础之列表详解

2018-09-12  本文已影响0人  时间仍在o是我们飞逝

前面在基础类型讲解中简介过列表的基本用法,包括增(append,insert),删(pop),改,查。本节做个详细的介绍。

一 列表是什么

列表list 由一系列按特定顺序排列的元素组成,可以将任何东西加入列表中,并且元素之间可以没有任何关系。定义列表用符号:[ ] ,元素之间用 “ ,” 分割。

L = [1, 2.88, '小王', True]
print(L) # 输出为  [1, 2.88, '小王', True]

二 列表常见用法

(1)访问元素

列表的索引从0开始,上例中L = [1, 2.88, '小王', True]元素的索引依次是0,1,2,3。访问元素,需要用到元素索引。也可以倒着索引,最后一个元素的索引为-1。索引要在正确的范围内,不然会抛出IndexError错误。

L = [1, 2.88, '小王', True]
# 从前往后索引
a = L[0]
b = L[1]
c = L[2]
d = L[3]
#################
# 从后往前索引
a1 = L[-1]
b1 = L[-2]
c1 = L[-3]
d1 = L[-4]
print(a,b,c,d,a1,b1,c1,d1)  #输出 1 2.88 小王 True True 小王 2.88 1
# e= L[-5]  IndexError
(2)修改,增加,删除元素
① 修改

通过索引拿到元素之后,直接赋值就可以实现修改的目的。

L = [1, 2.88, '小王', True]
print('修改前的第一个元素是: ' + str(L[0]))  #字符串拼接需要 + 两侧都是str类型,第一个元素类型为int,可以用str()强制转换类型
L[0] = 888
print('修改后的第一个元素是: ' + str(L[0]))

输出为:

修改前的第一个元素是: 1
修改后的第一个元素是: 888
② 增加
L = []
print(L)
L.append("小王")
print(L)
L.append("大王")
print(L)
L.append("老王")
print(L)  # 通过append追加到末尾
######################################
L.insert(1, "王中王") #插入到索引为1的位置
print(L)

输出为:

[]
['小王']
['小王', '大王']
['小王', '大王', '老王']
['小王', '王中王', '大王', '老王']
③删除

del 和pop 的区别在于del 没有返回删除的元素,pop可以拿到返回的元素

L = ['小王abc', '王中王', '大王', '老王', '88888']
print(L)

del L[1]  # 把索引为1的 '王中王' 删除
print(L)

s = L.pop(0) # 把索引为0的 '王中王' 删除,同时返回删除的元素,可以对他做一些想要的操作
print('删除了元素 '+s+' ,并把他修改为'+s.upper()) #upper可以把字符串改为大写
print(L)

L.pop()  #pop没有参数,默认删除最后一个
print(L)

输出为:

['小王abc', '王中王', '大王', '老王', '88888']
['小王abc', '大王', '老王', '88888']
删除了元素 小王abc ,并把他修改为小王ABC
['大王', '老王', '88888']
['大王', '老王']

上例中是根据索引删除的,下面看remove直接删除值:

L = ['小王', '王中王', '小王']
print(L)

L.remove('小王') #直接把 '小王' 删除,
print(L)

输出:

['小王', '王中王', '小王']
['王中王', '小王']

可以看出,remove只会删除列表中第一次出现的 指定值。

④判断元素在不在列表中

使用 in 判断:

L = ['A', 'B', 'C']

if 'A' in L:
    L.remove('A')  # L中有'A',就删除'A'
print(L)

if 'D' not in L:
    L.append('D') # L中没有'D',就追加'D'
print(L)

输出为:

['B', 'C']
['B', 'C', 'D']
(3)排序,翻转
L = ['A', 'C', 'B', 'D']
print(L)  # ['A', 'C', 'B', 'D']
L.sort()
print(L)  # ['A', 'B', 'C', 'D'], 可见sort直接更改了原list

L2 = ['A', 'C', 'B', 'D']
print(L2)  # ['A', 'C', 'B', 'D']
L3 = sorted(L2)  # sorted返回一个新的list
print(L2) #['A', 'C', 'B', 'D'] #原来的list不变
print(L3) #['A', 'B', 'C', 'D'] 

reverse 和 sort 一样,更改了原list。reversed和 sorted 一样,保留了原list。可以尝试自己写一下。

L = ['A', 'C', 'B', 'D']
print(L)  # ['A', 'C', 'B', 'D']
L.reverse()
print(L)  # ['D', 'B', 'C', 'A'], 可见sort直接更改了原list

L2 = ['A', 'C', 'B', 'D']
print(L2)  # ['A', 'C', 'B', 'D']
L3 = reversed(L2)  # sorted返回一个 iterator,需要用list强转才能变成list
print(L2) #['A', 'C', 'B', 'D']
print(L3) #  <list_reverseiterator object at 0x01580910>
print(list(L3)) #['D', 'B', 'C', 'A']

三 操作列表

包括常见的for循环,快速创建列表,切片,复制。

(1) for循环

我们经常需要遍历列表的所有元素,对每个元素执行相同的操作,这种情景适用于for循环。
先看个简单的例子:

L = [1, 2, 3, 4, 5]  
for x in L:   
    print(x)  
print('遍历结束')    

输出为:

1
2
3
4
5
遍历结束

解析:

  1. 第一行初始化一个列表,包含5个数字;
  2. 执行到第二行,这行代码让 Python 获取列表 L 中的第一个值 1,并将其存储到变量 x 中。x是用于存储列表中每个值的临时变量,可指定任何名称。即:取出第一个数,赋值给临时变量x。
  3. 执行到第三行,打印x,即打印 1。此时for循环中的代码块已经执行完毕,将再次开启循环。
  4. 代码回到第二行执行,上一次遍历取出的是第一个元素,这次取出第二个元素,赋值给临时变量x。
  5. 代码到第三行,打印x,即打印2。第二次循环完毕。
  6. 再次回到第二行执行相同操作。
    ......
  7. 直到list中所有元素,都执行了一次代码块,即认为遍历结束。
  8. 遍历结束,执行第四行,程序结束。

总结:每次遍历,将list中的每个元素都执行了相同的操作。遍历结束后,程序才会继续执行for循环之后的代码。

(2) 快速创建list
  1. 借助range()函数,可以轻松地生成一系列的数字。
for i in range(1,5):
    print(i)

输出:

1
2
3
4
#注意没有打印 5 ,也就是打印的数据包含头不包含尾。
  1. 借助range()函数, 创建数字列表
    如果将 range() 作为 list() 的参数,输出将为一个数字列表。
L=list(range(1,5))
print(L)  #输出为 [1, 2, 3, 4]

使用函数 range() 时,还可指定步长。例如,下面的代码打印 1~10 内的偶数

L = list(range(2, 11, 2))
print(L)  # [2, 4, 6, 8, 10]  , 从 2 开始数,然后不断地加 2 ,直到达到或超过终值( 11 )
  1. 列表生成式
    列表解析 将 for 循环和创建新元素的代码合并成一行,并自动附加新元素
    比如创建1~10 的数的平方的list:
L = [i * i for i in range(1, 11)]
print(L) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

还可以对 i 加限制条件:

L = [i * i for i in range(1, 11) if i%2==0] #偶数的平方
print(L) # [4, 16, 36, 64, 100]
(3) 切片

切片:取出list的部分元素,结果依然是一个list,切片使用符号 :,需要制定两个元素索引,依然是包含头不包含尾。
比如取出列表中的前五个数:

L = [i +1 for i in range(1, 20) if i%2==0] #取出1-20中的偶数,并+1,形成新的list
print(L)
L2=L[0:5]  # 使用切片,取出L中的前五个元素,结果是一个新的list
print(L)
print(L2)

输出:

[3, 5, 7, 9, 11, 13, 15, 17, 19]
[3, 5, 7, 9, 11, 13, 15, 17, 19]
[3, 5, 7, 9, 11]

标准方式要指定两个元素索引,也可以不指定:

L = [i + 1 for i in range(1, 20) if i % 2 == 0]  # 取出1-20中的偶数,并+1,形成新的list
print(L)

print(L[:3])  # 如果你没有指定第一个索引, Python 将自动从列表开头开始
print(L[2:])  # 如果你没有指定第二个索引, Python 将让切片终止于列表末尾
print(L[-3:])  # 倒着索引,最有一个元素索引为-1 ,输出后三个

输出:

[3, 5, 7, 9, 11, 13, 15, 17, 19]
[3, 5, 7]
[7, 9, 11, 13, 15, 17, 19]
[15, 17, 19]
(4) 复制

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引( [:] )。这让 Python 创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。
注意 :使用 L1=L2,不可以实现复制;

L = ['A', 'B', 'C']
L2 = L[:] 
print(L2) #可以看到内容和L一样
L.append("D")
L2.append("E") #分别给两个列表追加不同的元素
print(L)
print(L2) 

输出:

['A', 'B', 'C']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'E']

列表的使用总结的差不多了,都是基本语法。要记牢,才能自己会写同时能看懂别人的代码~

点赞评论走起啊~

上一篇下一篇

猜你喜欢

热点阅读