Python语言基础学习笔记(2)——列表

其他相关系列文章:
Python语言基础学习笔记(1)——变量、字符串

1列表的介绍

什么是列表

names = ['zhangsan','lisi','wangma',12,18,54]

首先从格式上来讲,前面有一个单词names,为列表名;有一个=可以理解为赋值;后面有一对中括号,将内部的元素括起来,并且每一元素之间用,分割;列表内的字符串需要用引号括起来。

  • 列表的定义:由一系列特定顺序排列的元素组成,列表名命名的规则与变量相同。列表内可以加入任何信息。
  • 列表的形式:在python中,使用[]来表示列表,并用(英文状态下的 , )来分割其中的元素。
  • 回顾变量的命名规则
    ①变量名只能包含字母、数字、下划线。其中,变量名的开头可以是字母或者是下划线,但不能是数字。
    ②变量名不能包含空格,但可以使用下划线分割其中的单词。例如:变量名可以是first_name,last_name,但不能是first name,last name
    ③不能将python的关键词和函数名作为变量名称。例如:初学者第一步一般都是写一句print('hello world'),其中的print即可以理解为输出关键词,它就不可以作为变量名。
    ④为图后续方便和容易理解,变量名应该设置的简短且具有描述性。例如,如果需要一个关于演员的变量,可以将变量命名为actor;如果需要一个关于电影的变量,可以将变量命名为movie

在定义中有提到,列表内可以加入任何信息。详细来讲,列表内可以加入任何数据类型,字符串、数字、以及后续接触到的所有数据类型,甚至是内嵌一个列表,这样也是合理的,例如,如下在列表names中又嵌入一个列表:

names = ['zhangsan','lisi','wangma',12,18,54,[1,2,3,'qi','yuan']]

列表的初步使用

列表的输出使用和前章所讲赋值后的变量的使用有些类似,通过print可以直接输出列表。

names_age = ['zhangsan','lisi','wangma',12,18,54]
print(names_age)

输出结果为

['zhangsan','lisi','wangma',12,18,54]

可见,输出内容和列表中的内容是一样的,也就是输出了列表中的所有内容。

2列表元素的访问

  • (此小节以之前所讲字符串的切片和索引为基础)

列表是有序集合,因此要访问列表的任何元素,只需要将该元素的索引告诉python程序即可。

names_age = ['zhangsan','lisi','wangma',12,18,54]
print(names_age[2])

输出结果为:

wangma

再次强调,在python中,第一个列表元素的索引为0,而不是1

  • 在列表元素的使用中,也可以使用之前所讲字符串方法,将元素进行转换。

例如:将首字母变为大写,在字符串中使用的是.title(),在此举例

names_age = ['zhangsan','lisi','wangma',12,18,54]
print(names_age[2].title())

输出结果为

Wangma

对于最后一个列表元素的访问,python提供了一种便利语法,通过将索引指定为-1即可

names_age = ['zhangsan','lisi','wangma',12,18,54,1,2,3,4,5,6,7,8,9,11,13]
print(names_age[-1])

执行后会输出:

13

可以使用拼接合并,利用列表中的元素,创造一个消息,例如:

names_age = ['zhangsan','lisi','wangma',12,18,54,1,2,3,4,5,6,7,13]
message = 'your name is ' + name_age[0] + '.'
print(message)

输出结果为

your name is zhangsan.

3修改、添加和删除列表元素

大多数所创建的列表都是动态的,也就意味着,可以对已经创建的列表进行修改、添加、删除元素。

修改

列表修改元素其实是和访问一个元素是类似的。
例如,想要把现有元素中的wangma修改成wangwuwu:

names_age = ['zhangsan','lisi','wangma',12,18,54]
names_age[2] = 'wangwuwu'
print(names_age)

输出结果为

['zhangsan','lisi','wangwuwu',12,18,54]

可以看到,新输出的为更改后的元素。若要修改元素,直接将想要修改的值,赋值给索引即可、

添加

在列表中添加元素需要使用append()函数,这个函数可以在列表的末尾,添加一个元素。
例如,想要在元素末尾添加一个10000:

names_age = ['zhangsan','lisi','wangma',12,18,54]
names_age.append(10000)
print(names_age)

输出结果为:

['zhangsan','lisi','wangma',12,18,54,10000]

插入

在大多数情况下,不一定是要在列表的末尾加元素,因此还提供了一种在列表中插入元素的函数。也就是insert()函数,可以在想要插入的位置,插入一个元素。
例如,想在zhangsan后面插入zhangwu:

names_age = ['zhangsan','lisi','wangma',12,18,54]
names_age.insert(1,zhangwu)
print(names_age)

输出结果为:

['zhangsan','zhangwu','lisi','wangma',12,18,54]

即成功的在索引号为1的位置,插入了zhangwu

删除

在列表中,删除的方法,在这里介绍三种

del方法

例如,想通过del函数,删除zhangwu

names_age = ['zhangsan','zhangwu','lisi','wangma',12,18,54]
del names_age[1]
print(names_age)

输出结果为
['zhangsan','lisi','wangma',12,18,54]

pop()方法

例如想要删除lisi,使用pop()方法为:

names_age = ['zhangsan','zhangwu','lisi','wangma',12,18,54]
name = name_age.pop(2)
print(names_age)

输出结果为:

['zhangsan','zhangwu','wangma',12,18,54]

而通过输出打印变量name可以发现这种方法和上述del方法的区别

print(names)

输出结果为

lisi

输出的结果就是被删除的字符串的信息,它把要删除的数据临时保存下来,后续如果需要,还能继续使用,而del是将数据彻底删除。

remove()方法

当你不知道要从列表中删除的元素的位置时,可以使用这个函数来删除指定元素。

names_age = ['zhangsan','zhangwu','lisi','wangma',12,18,54]
name_age.remove(‘lisi’)
print(names_age)

输出结果为

['zhangsan','zhangwu','wangma',12,18,54]

实现了直接知道元素信息,将元素进行删除,而不需要知道元素位置。

4组织列表

当我们创建完列表之后,列表元素的顺序常常都是无规律的,但有时会以特定的顺序来呈现一个信息。
在这里,主要介绍四种列表组织方式。需要注意各个函数的使用方法不一。

使用sort()函数对列表进行永久性排序

sort()函数:将列表中的元素按照字母顺序排列(只能对字符串进行排列)
例如

names_age = ['zhangsan','zhangwu','lisi','wangma']
names_age.sort()
print(names_age)

输出结果为:

['lisi','wangma','zhangsan','zhangwu']
使用sorted()函数对列表进行临时排序

sorted()函数:不改变原来实际排列顺序,同时给出按照字母顺序排列的临时列表
例如,想要对比看一下sorted()函数的临时排序情况,方便对比,输出三次,第一次为使用临时排序后,第二次为输出列表,第三次为使用sort()函数输出。

names_age = ['zhangsan','zhangwu','lisi','wangma']
print(sorted(name_age))            #临时排序
print(names_age)                   #真实列表、原列表
names_age.sort()
print(names_age)                   #完全改变内容顺序

输出结果为

['lisi','wangma','zhangsan','zhangwu']
['zhangsan','zhangwu','lisi','wangma']
['lisi','wangma','zhangsan','zhangwu']

可见,第二次输出的列表依然是前期原列表,并未进行改变,第一次输出仅仅是临时排序后输出。

使用reverse()函数对列表进行倒着打印

reverse()函数:永久性的反转列表元素的排列顺序,可以通过再次使用该函数,恢复到原来的排列顺序。

names_age = ['zhangsan','zhangwu','lisi','wangma']
names_age.reverse()
print(names_age)

输出结果为:

['wangma','lisi','zhangwu','zhangsan']
使用len()函数确定列表的长度

len()函数:快速获取列表的长度

names_age = ['zhangsan','zhangwu','lisi','wangma']
print(len(names_age))

输出结果为

4

5遍历列表

使用for循环,依次访问列表的元素
前期讲过通过索引号来访问列表,而索引号太过复杂,因此需要for循环。
for循环举例:

names = ['zhang','wu','li','wang','zhao']
for name in names:
    print(name)    #注意print前空一个Tab

上述for循环代码,第一行定义列表names,将后面的元素赋值给names;第二行使用for循环来遍历names,其中的name是新定义的一个变量名,names是列表名,后面一定要记得需要一个冒号;第三行首先需要一个Tab键,然后将变量输出。方便理解,遍历的意思即为:按顺序访问每一个。
它的运行原理是,首先将列表中的第一个元素赋值给变量name,然后输出name,然后第二个元素。。。循环如此。
上面for循环输出结果为

zhang
wu
li
wang
zhao

上述运行的原始代码中,第二行与第三行是一个for循环整体,如果循环结束,可以在第四行加入一条语句,终结程序,且仅仅运行一次。如下所示:

names = ['zhang','wu','li','wang','zhao']
for name in names:
    print(name)    #注意print前空一个Tab
print('print end')

运行结果为:

zhang
wu
li
wang
zhao
print end

如果将其与第三行对齐,加入for循环之中,测试如下

names = ['zhang','wu','li','wang','zhao']
for name in names:
    print(name)    #注意print前空一个Tab
    print('print end')

输出结果为

zhang
print end
wu
print end
li
print end
wang
print end
zhao
print end

因此,在以后的使用中,要注意哪些是需要循环的,哪些是不需要循环的。如果不需要循环,就不需要一个Tab键。

6操作数值列表

数值列表,即在一个列表中,他里面的元素都是由数值组成的
range()函数:生成一系列数字,它里面包括三个参数

range(start,end,scan)
参数的含义:
start是计数开始的位置,默认是从0开始
end是计数结束的位置
scan是每次跳跃的间距,默认为1

例如:

for x in range(1,10):
    print(x)

输出结果为:

1
2
3
4
5
6
7
8
9

由此可见,输出结果不包括end的参数10
如果range()函数内只有一个参数,则表示会产生从0开始计数到输入参数(前一位整数)结束的整数。如下

for x in range(10):
    print(x)

输出结果为

0
1
2
3
4
5
6
7
8
9

如果是3个参数,情况如下:

for x in range(1,10,3):
    print(x)

输出结果为:

1
4
7

如上所示,range()函数是为了创建一系列的数值,但是并不能产生一个数值列表。使用range()创建数字列表,需要使用list()函数,将数据进行转化为列表。
例如:

numbers = list(range(1,10))
print(numbers)

输出结果为

[1,2,3,4,5,6,7,8,9]   #成功将这一组数值转化为列表
  • 小练习:输出10以内所有奇数的平方
    思路解析:首先需要一个空列表,并且使用for循环找到10以内的奇数对其进行赋值,然后计算其平方,将结果添加进另一个新列表中,循环结束后输出新列表。
x = []
for x in range(1,10,2):
    y.append(x**2)
print(y)

输出结果为

[1,9,25,49,81]

若想要更简单的代码,python提供一种列表解析法。如下

y = [x**2 for x in range(1,10,2)]
print(y)

列表解析的工作原理,首先将第一个值1赋值给x,x又将值赋值给它前面的x进行平方运算,运算结果作为第一个y值,如此循环。

  • 对数字列表进行简单的统计计算
    min()函数,求最小值
    max()函数,求最大值
    sun()函数,求总和
    例如:注意函数的使用方法
x = min(1,2,3,4,5,6)
y = max(1,2,3,4,5,6)
z = [1,2,3,4,5,6]
print(x)
print(y)
print(sum(z))
1
6
21

同样min()和max()也可以改为sum()函数的使用方法,如下

z = [1,2,3,4,5,6]
print(min(z))
print(max(z))
print(sum(z))

输出结果为

1
6
21

7使用列表的一部分

  • 处理列表的部分元素需要用到前期所讲过的知识——切片
    创建切片,可以指定要使用的第一个元素和最后一个元素的索引。这点与range()相似
    例如:
names = ['zhang','wu','li','wang','zhao']
print(names[1:3])
print(names[:3])
print(names[2:])
print(names[-3:])

输出结果分别为:
需要注意的是,第一个元素索引号为0,结尾元素不会被输出。

['wu', 'li']
['zhang', 'wu', 'li']
['li', 'wang', 'zhao']
['li', 'wang', 'zhao']

如果想要复制列表,可创建一个包含整个列表的切片,同时省略起始索引和终止索引([:])
例如:

names = ['zhang','wu','li','wang','zhao']
names2 = names[:]
print(names2)

输出结果为:

['zhang','wu','li','wang','zhao']

8元组

当我们需要一个不能被修改的列表时,就需要用到元组。
元组是不可变的列表,元组使用()来标识
元组也可以通过索引来访问其元素,也可以使用for循环遍历元组中的所有值。
例如,尝试修改元组中的数值:

tuple = (1,2,3,4,5,6,7)
tuple[2] = 100
print(tuple)

结果就会报错

Traceback (most recent call last):
  File "tuple.py", line 2, in 
    tuple[2] = 100
TypeError: 'tuple' object does not support item assignment

你可能感兴趣的:(Python语言基础学习笔记(2)——列表)