Python基础之列表详解

前面在基础类型讲解中简介过列表的基本用法,包括增(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
② 增加
  • 使用append可以将元素 追加 到list末尾;
  • 使用insert可以将元素 插入 到list任何位置;
L = []
print(L)
L.append("小王")
print(L)
L.append("大王")
print(L)
L.append("老王")
print(L)  # 通过append追加到末尾
######################################
L.insert(1, "王中王") #插入到索引为1的位置
print(L)

输出为:

[]
['小王']
['小王', '大王']
['小王', '大王', '老王']
['小王', '王中王', '大王', '老王']
③删除
  • 根据索引删除,使用del ,pop 方法
  • 根据值删除,使用remove 方法

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)排序,翻转
  • 排序用sort,sorted方法;
  • 翻转用reverse,reversed 方法;
    sort,reverse是直接更改了原list。sorted,reversed是新生成了一个list,原list不变;可以同时传入参数reversed=True/False,是否对排序后的列表进行翻转。
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']

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

点赞评论走起啊~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 基础语法 运行 Python 交互式解释器 在命令行窗口执行python后,进入 Python 的交互式解释器。 ...
    小天真_5eeb阅读 1,396评论 0 36
  • 唐 雍裕之 袅袅古堤边, 青青一树烟。 若为丝不断, 留取系郎船。 在岸边长长的堤坝上,站着一名身着白衣...
    27315涵阅读 106评论 0 0
  • 爱是需要语言表达的。 很多爸妈在孩子很小的时候,会和孩子说出“我爱你”,但在孩子3岁以后会觉得很难开口。 千万不要...
    耿丽娟阅读 42评论 0 0
  • 三岁 他尿裤子,她把外裤脱下来给他,说记得要还。 十三岁 他追女生,她把钱包塞给他,说记得要还。 二十三岁 他没带...
    鱼粉3阅读 320评论 0 0