【Python基础】1.4 列表

集合体,即其中可能包括多个类型的多个值,但只由一个变量表示。

当多个值一某一个特定顺序储存时,我们就有了值的序列。序列是迭代的基础。

1.4 列表

列表(list)就是一种有序并且可变的集合体,用[]构建。有序指的是列表可以做切分,可变是指可以增加删减或改变列表中元素的值(列表本身地址不改变)。

例子

primes = [2, 3, 5, 7]
print(primes)
[2, 3, 5, 7]
things = [5, 7, 'hello', 9.2, ['another', 'list']]
print(things)
[5, 7, 'hello', 9.2, ['another', 'list']]

列表上的迭代

对于一个列表,我们可以对列表中的每一个元素依次进行相关操作。这种方式就是迭代。例如:

students = ['Allen', 'Boris', 'Chris']
for student in students:
    print("Hello, " + student + "!")
Hello, Allen!
Hello, Boris!
Hello, Chris!

因为列表一般都包括多个值,因此对于列表的命名方式我们通常采用复数的形式。

提取列表中元素

  • 列表中的元素都可以通过该元素的位置索引来提取该值。
  • 在Python中,位置顺序和C一样,从0开始。
  • 如何操作:在要提取元素的列表名称后跟方括号[]以及位置索引。

例子:提取students列表中的首个名字

student = students[0]
print(student)
Allen

通常我们有些时候想要获取列表中的最后一个元素,这个时候我们可以用-1索引。更一般的情况,我们索引可以用-+n来获取倒数第n个元素。

student1 = students[-1]
student2 = students[-2]
print(student1, student2)
Chris Boris
  • 正索引不能超过列表本身的长度-1。
  • 负索引不能超过列表本身的长度0。

列举列表中的元素

  • 当我们对列表做循环时,有时候我们想要知道当前元素的索引值。
  • 此时我们使用enumerate可以在循环时跟踪元素的索引。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']

print("All students are shown as follows:\n")
for index, student in enumerate(students):
    num = str(index)
    print("ID: " + num + " Student: " + student)
All students are shown as follows:

ID: 0 Student: Allen
ID: 1 Student: Boris
ID: 2 Student: Chris
ID: 3 Student: Davis
ID: 4 Student: Eric

创建一个空列表

names = []

列表长度

students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
l = len(students)
print(l)
5

列表运算

修改列表中的元素值

students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
students[0] = 'Austin'
print(students)
['Austin', 'Boris', 'Chris', 'Davis', 'Eric']

找到元素在列表中的位置(索引)

students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
pos = students.index('Boris')
print(pos)
1

如果列表中存在多个目标值,只会返回第一次出现该值的位置:

outputs = ['rock', 'scissor', 'paper', 'rock', 'paper', 'scissor']
pos = outputs.index('paper')
print(pos)
2

判断元素是否存在于列表中

判断元素是不是在列表中我们只需要用in关键词。

students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
output1 = 'Chris' in students
output2 = 'William' in students
print(output1, output2)
True False

在列表中增加值

在列表末尾增加值(append)

students.append('Frank')
print(students)
['Allen', 'Boris', 'Chris', 'Davis', 'Eric', 'Frank']

在列表中间添加值

在这种情况下我们要用到list.insert()方法。基本语法是

list.insert(index, object)

表示在列表中第index位元素前面插入object。其实也就是让新插入的object变为第index位。

students.insert(3, 'Green')
print(students)
['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']

在列表中删除值

关于删除我们这里有几种方法:

  • del关键词:在del后面加上列表名称以及用方括号括上的索引。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
del students[0]

print(students)
['Boris', 'Chris', 'Davis', 'Eric']
  • remove():list的面向对象方法,括号中输入要删去的值。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
students.remove('Allen')

print(students)
['Boris', 'Chris', 'Davis', 'Eric']
  • pop():list的面向对象方法,括号中输入要删去值的索引,删除该值并返回。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
first_student = students.pop(0)

print(first_student, students)
Allen ['Boris', 'Chris', 'Davis', 'Eric']

给列表排序

列表排序有两种方法,sortedsort

  • sorted()是Python中的内建函数,可以对有序集合体排序。
  • sort()是list面向对象的方法。

因此这两者的区别为:

  • sorted()生成一个新的列表。
  • sort()对已经存在的列表进行修改。

逆序可以设定参数reverse=True

students = ['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
students_ordered = sorted(students)

print(students)
print('Our students are currently in alphabetical order.')
print(students_ordered)
['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
Our students are currently in alphabetical order.
['Allen', 'Boris', 'Chris', 'Davis', 'Eric', 'Frank', 'Green']
students = ['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
students.sort(reverse=True)

print('Our students are currently in reverse alphabetical order.')
print(students)
Our students are currently in reverse alphabetical order.
['Green', 'Frank', 'Eric', 'Davis', 'Chris', 'Boris', 'Allen']

另外要注意,list面向对象的reverse()方法和sort(reverse=True)不一样,前者是将列表逆序,并没有排列:

students = ['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
students.reverse()
print(students)
['Frank', 'Eric', 'Davis', 'Green', 'Chris', 'Boris', 'Allen']

列表切片

切片我们用这种形式[a:b],其中a和b取值范围是是不超过列表长度的自然数。

  • [:b]表示列表从头取到索引第b-1位的数
  • [a:]表示列表从索引第a位的数取到末尾
  • [a:b]:当a<b时表示列表从索引第a位的数取到索引第b-1位,否则返回[]
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']

first_batch = students[:3]
middle_batch = students[1:4]
end_batch = students[3:]

print(first_batch)
print(middle_batch)
print(end_batch)
['Allen', 'Boris', 'Chris']
['Boris', 'Chris', 'Davis']
['Davis', 'Eric']

复制列表

列表复制是我们不能用list1 = list2这种命令,这样一来会使得list1list2都储存在同一地址里,导致如果其中一个变量发生变更,另一个也会发生变更。

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

因此我要利用列表切片进行列表复制:

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

推荐阅读更多精彩内容