上篇介绍了python的变量和简单的数据类型,本篇学习和总结列表的使用。正如list、set等列表在Java里广泛的使用,列表在Python里也广泛使用。列表是什么?简单来说,就是一系列元素按照顺序排列起来的集合。
目录
一、访问列表元素
二、修改、添加、删除元素
1、修改元素
2、添加元素
3、删除元素
三、排序
1、sort方法
2、sorted方法
3、倒序排列reverse方法
四、操作列表
1、遍历列表
2、数字列表
3、使用部分列表
五、元组
一、访问列表元素
people = ["man", "woman", "child"]
print(people)
print(people[0])
print(people[1])
#访问最后一个元素的三种方式
print(people[2])
print(people[len(people)-1])
print(people[-1])
注意,跟Java很大的一个区别,在通过下标访问列表元素时,index可以为负数。例如,list[-1]表示列表的倒数第一个元素。所以,python列表访问元素的下标范围为[-len(list) — len(list) -1]。当不在该范围时,也会抛出越界的异常。
二、修改、添加、删除元素
1、修改元素
number = [0, 1, 2]
print(number)
number[0] = 3
number[1] = 4
number[-1] = 5
print(number)
2、添加元素
array = ["b", "c", "d"]
print(array)
array.insert(0, "a")
array.append("e")
print(array)
使用Insert(index,element)可以在任意位置插入元素;如果想在列表的最后插入元素,可以使用append(element)方法。
3、删除元素
(1)使用del删除任何一个元素,该元素不再被使用。
language = ["python", "java", "c++"]
print(language)
del (language[-1])
print(language)
del (language[-1])
print(language)
(2)使用pop删除任何一个元素,可以用变量接收该元素继续使用。
language = ["python", "java", "c++"]
print(language)
l3 = language.pop()
print(l3)
print(language)
l2 = language.pop(1)
print(l2)
print(language)
pop的概念类似栈弹出栈顶元素。栈是典型的先进后出数据结构,因此pop操作在不指定index时总会弹出最后一个元素。
(3)使用remove直接删除一个指定值的元素
language = ["python", "java", "c++", "c++"]
print(language)
language.remove("c++")
print(language)
remove一次只删除一个元素,如果列表里有多个相同的元素,只会删除第一个匹配到的元素。如果需要删除所有的匹配元素,则需要遍历进行删除。
三、排序
1、sort方法
sort方法默认按首字母从a-z排序,如果想从z-a,可以传入reverse=True。 sort方法是永久修改,不再保持原有的元素排列顺序。
language = ["java", "python", "c++"]
print(language)
language.sort()
print(language)
language.sort(reverse=True)
print(language)
2、sorted方法
如果想临时的改变列表的排序去使用它,但是还想保留列表原有的顺序,那么可以使用sorted方法。
language = ["java", "python", "c++"]
print(language)
print(sorted(language))
print(language)
3、倒序排列reverse方法
language = ["java", "python", "c++"]
print(language)
language.reverse()
print(language)
四、操作列表
1、遍历列表
Python使用for [元素] in [列表] 语法来进行遍历,注意缩进。如果想在for循环中处理逻辑,应有缩进。如果想在for循环完成后处理逻辑,则不应有缩进。即:for循环后没有缩进的语句只执行一次。
languages = ["python", "java", "c++"]
for language in languages:
print(language)
print("for in end")
需要注意的是:不同于Java,缩进的不合理使用,在python里面可能导致很多问题。例如上面,假如最后一行代码也缩进了,会导致啥问题?毫无疑问,会在每一次打印完元素后紧接着打印一条"for in end"。
那如果for in的后一行语句没有缩进呢?编译器会提示报错,编译不过。
2、数字列表
(1)生成数字列表
使用range()函数可以生成一系列的数字,使用list()函数可以把这一系列的数字快速转化为列表。 注:range()函数可以指定步长,默认为1
# 1-10的列表
numbers = list(range(1, 11))
print(numbers)
# 1-10奇数的列表
numbers = list(range(1, 11, 2))
print(numbers)
# 1-10数字的平方
numbers = []
for number in range(1, 11):
numbers.append(number ** 2)
print(numbers)
(2)数字列表简单统计
Python提供了几个专门用于处理数字列表的函数,可以轻松地获取最大值、最小值和总和,进而也能获取平均值。
numbers = list(range(1, 11))
print(min(numbers))
print(max(numbers))
print(sum(numbers))
print(sum(numbers)/len(numbers))
(3)列表解析
前面介绍的生成数字列表方式包含两三行代码,python支持一行代码就能生成数字列表。
numbers = [number**2 for number in range(1, 11)]
print(numbers)
3、使用部分列表
(1)切片
指定要使用的第一个元素和最后一个元素的索引创建切片。特别需要注意的是:
- 如果从索引0开始,那么可以直接[:n]
- 如果到最后一个索引为止,那么可以缩写为[n:]
- 支持传入负数,对应切片为倒数第x个元素到倒数第y个元素
- 前面的索引必须小于后面的索引(注:索引为负数时,没有倒数第0个元素这种说法)
languages = ["python", "java", "c++", "php"]
print(languages)
print(languages[1:3])
print(languages[:3])
print(languages[2:])
print(languages[:-3])
print(languages[-2:])
(2)遍历切片
切片返回的是一个新的列表,新的切片列表不会影响原来的列表,我们可以遍历这个切片列表:
languages = ["python", "java", "c++", "php"]
for language in languages[:3]:
print(language)
(3)复制列表
如果切片既不指定起始索引,也不指定终止索引,那么会得到一个什么样的切片?我们心里应该都有答案了,那就是跟原来的列表内容一样的列表,达到了复制列表的目的。注:通过切片复制得到的列表是跟原来列表完全无关的一个新列表。
languages = ["python", "java", "c++", "php"]
languages_new = languages[:]
print(languages)
print(languages_new)
上面提到了,使用切片复制而来的列表是一个新列表,跟原来的列表没有关联。那么思考一下如下的代码,会输出什么?
languages = ["python", "java", "c++", "php"]
languages_1 = languages
languages.append("oc")
languages_1.append("js")
print(languages)
print(languages_1)
答案是:
是不是看着有点不符合预期?为什么不是languages多一个"oc",languages_1多一个"js"?我们直接把languages这个变量赋值给languages_1,这两个变量其实指向的都是同一个列表。所以,对languages的改动其实就是对languages_1的改动,反过来也一样。
五、元组
上面提到的列表,元素的内容是可变的。如果我们想定义一个元素不可变的列表,那么如何实现。python提供了元组这种列表,定义完不可重新赋值,与列表的区别为使用()而不是[]来定义。
people = ("male", "female")
print(people)
people[1] = "both" # 不能这样
print(people)
如上所以,从性别来说,人只有男性和女性,没有第三种性别。因此,对于这种不可变的列表,我们可以使用元组。如果要修改,则会编译报错,这是符合预期的:
元组的遍历跟列表一样:
people = ("male", "female")
print(people)
for one in people:
print(one)
本篇总结了python里列表的使用,包括:列表的创建,列表元素的增加、删除和修改,列表的排序和遍历,数字列表和简单的统计,列表切片以及不可变的列表-元组等。再下一篇,我们将总结条件控制语句-if语句的使用,让我们的程序可以采取多种不同的运行路线。