python学习03——列表

[TOC]

列表相当于Java中的数组,python中的列表可以存储任意类型的元素,同时列表会根据存储内容动态分配内存

1 创建列表

1.1 使用[]创建列表

mylist = ["hello", "word", 98]
print(mylist)  # ['hello', 'word', 98]

1.2 使用内置函数list()创建列表

mylist2 = list(["hello", "word", 2022])
print(mylist2)  # ['hello', 'word', 2022]

2 查询元素

2.1 index()函数

2.1.1 如果列表有多个重复元素,index()只返回第一个元素的索引。

mylist = ["hello", "word", 98, "hello"]

print(mylist.index("hello"))  # 0

2.1.2 如果列表中没有此元素,则会抛出异常。

mylist = ["hello", "word", 98, "hello"]

print(mylist.index("python"))  

抛出异常:

Traceback (most recent call last):
  File "D:\pythonStudy\fistproject\demo11.py", line 3, in <module>
    print(mylist.index("python"))  
ValueError: 'python' is not in list

2.1.3 可以指定查询位置。

使用index(obj, start, end)查询元素位置,从startend前一位,不包括end位置。

mylist = ["hello", "word", 98, "hello"]

print(mylist.index("hello", 1, 4))  # 3

可以看见,查询的范围是:"word", 98, "hello"

2.2 获取指定索引位置的元素

Java类型,但是要注意一点,python中索引可以是负数:

  • 正向索引:元素从0N-1
  • 逆向索引:元素从-N-1
mylist = ["hello", "word", 98, "python"]

# 正向索引
print(mylist[3])  # python
# 逆向索引
print(mylist[-1])  # python

2.3 列表的切片

列表的切片就是列表的拷贝语法为列表名[start: stop: step],其中,不包含stop的元素

  • 切片后的列表,是新的列表,和原列表的ID不一样
  • 切片的范围:[start, stop)
  • 步长step默认为1
  • step为正数时,从start开始往后切片:
    • [: stop: step]:切片的第一个元素默认是列表的第一个元素
    • [start: : step]:切片的最后一个元素默认是列表的最后一个元素
  • step为负数时,从start开始往前切片:
    • [: stop: step]:切片的第一个元素默认是列表的最后一个元素
    • [start: : step]:切片的最后一个元素默认是列表的第一个元素

2.3.1 切片使用和切片列表地址改变

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# 切片从index为1到index为4
list1 = mylist[1: 5: 1]
print(list1)  # [20, 30, 40, 50]

# 地址改变
print("原列表地址:", id(mylist))  # 原列表地址: 2577983402944
print("新列表地址:", id(list1))  # 新列表地址: 2577983487232

2.3.2 默认start和默认stop和改变step

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# 默认start
list1 = mylist[: 5: 1]
print(list1)  # [10, 20, 30, 40, 50]

# 默认stop
list1 = mylist[1:: 1]
print(list1)  # [20, 30, 40, 50, 60, 70, 80]

# 改变step
list1 = mylist[:: 2]
print(list1)  # [10, 30, 50, 70]

2.3.3 step为正数时

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# step为正数
list1 = mylist[:: 1]
print(list1)  # [10, 20, 30, 40, 50, 60, 70, 80]

2.3.4 step为负数时

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# step为正数
list1 = mylist[:: -1]
print(list1)  # [80, 70, 60, 50, 40, 30, 20, 10]

2.4 列表元素的判断和遍历

判断使用innot in进行判断。

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# 元素的判断
print(50 in mylist)  # True
print(100 in mylist)  # False
print(100 not in mylist)  # True

# 元素的遍历
for item in mylist:
    if item == 50:
        break

3 列表增加元素

3.1 append()

append()函数是往列表的末尾增加一个元素。

mylist = ["hello", "world", 2022]

mylist.append(100)
print(mylist)  # ['hello', 'world', 2022, 100]

3.2 extend()

extend()函数是将其他列表元素添加到列表中。

list1 = ["python", "java", 2033]

# append是将list1作为一个元素,添加到mylist中
mylist = ["hello", "world", 2022]
mylist.append(list1)
print(mylist)  # ['hello', 'world', 2022, ['python', 'java', 2033]]

# extend是将list1的所有元素,依次添加到mylist中
mylist = ["hello", "world", 2022]
mylist.extend(list1)
print(mylist)  # ['hello', 'world', 2022, 'python', 'java', 2033]

3.3 insert()

insert()函数是在任意位置插入一个元素。

mylist = ["hello", "world", 2022]

mylist.insert(1, "New OBJ")
print(mylist)  # ['hello', 'New OBJ', 'world', 2022]

3.4 切片

切片是将从startend前一位的元素全部移除,并插入新列表的所有元素。

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

mylist2 = ["python", "c++", "java"]

# 将mylist从index为1 到 index为3之前 的所有元素(20, 30)移除,并在这个位置插入mylist2
mylist[1:3] = mylist2
print(mylist)  # [10, 'python', 'c++', 'java', 40, 50, 60, 70, 80]

4 列表的删除操作

4.1 remove()

remove()是删除一个元素,但是要注意:

  • 如果有多个重复元素,则只删除第一个
  • 如果列表中没有该元素,则抛出异常
mylist = [10, 20, 30, 10, 20, 30]

mylist.remove(30)
print(mylist)  # [10, 20, 10, 20, 30]

# 抛出异常
# mylist.remove(100)  ValueError: list.remove(x): x not in list

4.2 pop()

pop()是删除某个索引的元素,同Java中的remove()

mylist = [10, 20, 30, 10, 20, 30]

mylist.pop(1)
print(mylist)  # [10, 30, 10, 20, 30]

4.3 切片

要注意的是,切片会产生一个新的列表

mylist = [10, 20, 30, 10, 20, 30]

newList = mylist[1:3]
print(newList)  # [20, 30]
print("原ID:", id(mylist))  # 原ID: 1988783109056
print("新ID:", id(newList))  # 新ID: 1988783193344

4.4 clear()

clear()是清空列表的意思。

mylist = [10, 20, 30, 10, 20, 30]

mylist.clear()
print(mylist)  # []

4.5 del

del是删除列表的意思,删除后,此列表就不会存在。

mylist = [10, 20, 30, 10, 20, 30]

print(mylist)  # [10, 20, 30, 10, 20, 30]

del mylist
# 报错
# print(mylist)  NameError: name 'mylist' is not defined. Did you mean: 'list'?

5 列表元素的修改

列表元素的修改有直接修改和切片两种方式。

mylist = [10, 100, 30, 40, 50, 60]

# 直接修改
mylist[1] = 20
print(mylist)  # [10, 20, 30, 40, 50, 60]

# 切片 将mylist的从index为1到index为3之前的所有元素(20, 30)删除,插入新的元素
mylist[1:3] = [300, 400, 500]
print(mylist)  # [10, 300, 400, 500, 40, 50, 60]

6 列表排序

列表排序通过以下两种方式进行:

  • sort()函数:排序原列表,不生成新的列表;
  • 内置函数sorted():生成新的排序列表,原列表不发生改变。

默认排序是升序,同时,可以指定reserve=True来进行降序排序。

mylist = [23, 38, 29, 19, 88, 64]

print(mylist)  # [23, 38, 29, 19, 88, 64]
mylist.sort()
print(mylist)  # [19, 23, 29, 38, 64, 88]
# 降序排序
mylist.sort(reverse=True)
print(mylist)  # [88, 64, 38, 29, 23, 19]

# 使用内置函数
mylist = [23, 38, 29, 19, 88, 64]
newList = sorted(mylist, reverse=False)
print(mylist)  # [23, 38, 29, 19, 88, 64]  原列表不发生改变
print(newList)  # [19, 23, 29, 38, 64, 88]

7 列表生成式

列表生成式的公式为:[ 表达式 for i in range(1, 10) ]

举例:

mylist = [i for i in range(1, 5)]
print(mylist)  # [1, 2, 3, 4]

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

推荐阅读更多精彩内容