Python Learning-列表

Python Learning-列表_第1张图片

列表由一系列按特定顺序排列的元素的对象。它是一种有序的、可扩展与收缩的对象。如果学过其它语言,它看起来有点像数组,不过,列表中可以存储不同类型的对象

列表用[]来表示;列表中的元素逗号进行分隔

例:定义一个包含不同类型的自行车列表,并将列表赋值给一个变量

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

打印这个列表看看

print(bicycles)

输出:

['trek', 'cannondale', 'redline', 'specialized']

访问列表元素

因为列表是有序的,所有可以通过索引来访问到列表中的元素

列表中元素的索引默认从0开始
例:从bicycles列表中取出trek类型的自行车

print(bicycles[0])

输出:

treck

treck在列表中的第一个位置,所以它的索引是0;通过索引访问元素可在列表名称后加上方括号[],在括号中填写上索引即可

print(bicycles[0].title())  # 将输出的内容开头大写

输出:

Treck

请记住,索引从0开始,第1个元素的索引是0,第2个元素的索引是1,第3个元素的索引是2,……第n个元素的索引是n-1

如果索引为-1,可直接访问到最后一个元素

print(bicycles[-1])

输出:

specialized

当索引值是正数时,取值是从左向右取的;如果索引是负数时,取值是从右往左取的;所以,当索引是-2时,将得到列表中倒数第2个元素

修改、添加和删除元素

列表不仅是有序的,而且是动态的,它可以在程序运行过程中添加、修改和删除其中的元素

修改

例:创建一个食物列表

foods = ['potato', 'tomato', 'noodles', 'apple']

将第一个元素potato修改为banana

foods[0] = 'banana'
print(foods)

输出:

['banana', 'tomato', 'noodles', 'apple']

通过foods[0]访问到了第一个元素potato,再通将'banana'赋值给该元素,便完成了修改动作

添加

例:在foods列表中添加一个新的食物梨pear

foods.append('pear')
print(foods)

输出:

['banana', 'tomato', 'noodles', 'apple', 'pear']

append()会将新元素添加到列表的末尾

如何在指定位置添加(插入)一个新元素呢?

foods.insert(1, 'peanut')
print(foods)

输出:

['banana', 'peanut', tomato', 'noodles', 'apple', 'pear']

insert()方法可以将新元素插入到列表的指定位置,括号中的1表示要将新元素添加到索引1的位置上,peanut表示要插入的新元素花生,相应的,其它元素的位置都会向右移动一个位置

删除

例:将foods列表中的元素peanut删掉

del foods[1]
print(foods)

输出:

['banana', 'tomato', 'noodles', 'apple', 'pear']

del会将列表删除掉,如果想删除某个元素,可以通过访问索引的方式来删除其中的一个元素,在这里,通过访问索引1,删除掉了花生元素

如果这样写

del foods
print(foods)

输出:

Traceback (most recent call last):
File "", line 1, in
foods
NameError: name 'foods' is not defined

程序会报错,因为del foods将foods对象从内存中删除掉了,程序再也找不到它了

使用pop()将删除的元素返回

直接看例子:

food = foods.pop()
print(food)
print(foods)

输出:

pear

['banana', 'tomato', 'noodles', 'apple']

此时,列表中的最后一个元素不见了,而变量food被方赋值了pearpop()方法会将列表中最后一个元素弹出,可以将此时的列表想象成一个栈,最后一个进入栈中的元素将会被弹出,这是一个后进先出模式

弹出列表中任何位置的元素

food = foods.pop(1)
print(food)
print(foods)

通过在pop()中指定索引来弹出指定位置的元素,这里将第2个元素tomato弹出,并保存到了变量food

请牢记,当使用pop()弹出一个元素时,该元素便从列表中消失了

如果知道元素的名称,却不知道它在列表的什么位置,如何删除?

此时可以使用remove()方法

例:将foods列表中noodles元素删除

foods.remove('noodles')
print(foods)

输出:

['banana', 'tomato', 'apple']

元素noodles从列表中被删除;remove()方法接受一个字符串参数,用来指定要删除的元素的名称

如果noodles元素在列表中出现多次,remove()只要删除第一个匹配到的元素,也就是只会删除一次

列表排序

列表虽然是有序的,但并不代表所有的元素的排序都是合理的,Python提供了排序方法

sort()可以对列表进行永久性的排序

例:

foods = ['potato', 'tomato', 'noodles', 'apple']
foods.sort()
print(foods)

输出:

['apple', 'noodles', 'potato', 'tomato']

可以看出,sort()foods列表中的元素按首字母进行了排序,这是它针对字符串默认的排序方式

并且,此后这个列表将永远变成排序后的样子

foods列表中元素按首字母倒序排列

foods.sort(reverse=True)
print(foods)

输出:

['tomato', 'potato', 'noodles', 'apple']

sort()方法传递参数reverse=True即告诉该方法是否将元素反转,也是就是倒序;默认reverse=Fase,即不倒序

如果不想永久性的改变列表的排序结构,可以使用sorted()方法

例:

foods = ['potato', 'tomato', 'noodles', 'apple']
print(sorted(foods))
print(foods)

输出:

['apple', 'noodles', 'potato', 'tomato']
['potato', 'tomato', 'noodles', 'apple']

可以看出,第一行是排序后的输出,第二行是原来的列表,其内容顺序并没有发生变化

同样的,也可以向sorted()方法中传入reverse=True参数,将列表进行倒序

foods = ['potato', 'tomato', 'noodles', 'apple']
print(sorted(foods, reverse=True))
print(foods)

输出:

['tomato', 'potato', 'noodles', 'apple']

['potato', 'tomato', 'noodles', 'apple']

有时候,列表中的元素并不都是小写字符串,不家可能有的是数字有的是字符串,这些情况下的排序是比较复杂的,将会在后面讨论

reverse()函数可以将列表反转,并且只有反转的功能

例:

foods = ['potato', 'tomato', 'noodles', 'apple']
foods.reverse()
print(foods)

输出:

['apple', 'noodles', 'tomato', 'potato']

注意,reverse()不是对列表进行排序,而是将原列表进行左右反转

reverse()对列表的操作是永久性的

查看列表的长度

foods = ['potato', 'tomato', 'noodles', 'apple']
print(len(foods))

输出:

4

len()函数将返回列表foods的长度,也就是元素的个数

注意,如果写错索引位置,将会导致数据错误或系统报错,新手常会现出索引上的问题

例:

foods = ['potato', 'tomato', 'noodles', 'apple']
print(foods[4])

foods列表中最大索引是3,报错内容:

Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/s.py", line 2, in
print(foods[4])
IndexError: list index out of range

附语:

Python语句的末尾可以不写分号,当然写上分号也是正确的,为了简洁与美观,一般不会在语句末尾加分号

目录
上一章 Python Learning-变量和简单数据类型
下一章 Python Learning-列表的更多操作

你可能感兴趣的:(Python Learning-列表)