赞
踩
关于列表,需要对其说明如下三点:
“列表是一种序列”指的是可以通过索引(或下标)的方式实现列表元素的获取,Python中的索引都是用英文状态下的方括号表示,而且,对于位置索引来说,都是从0开始。接下来通过具体的例子来解释四种常见的索引方式。
正向单索引指的是只获取列表中的某一个元素,并且是从左到右的方向数元素所在的位置,可以用[n]表示,例如:
list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]
# 取出第一个元素
print(list1[0])
# 取出第四个元素
print(list1[3])
# 取出最后一个元素
print(list1[6])
# 取出“体重72”这个值
print(list1[6][1])
结果:
张三
江苏
['身高178', '体重72']
体重72
如上结果显示,变量list1是一个含有7个元素的列表,包含字符串(注意,字符串必须用引号引起来)、数值和列表。由于位置索引是从0开始,所以索引号与实际的位置正好差1,最后使用print函数将取回的元素打印出来。
列表中最后一个元素正好又是一个列表(一般称为嵌套列表),所以要取出嵌套列表中的元素就需要两层索引实现。
负向单索引是指在正向单索引的基础上添加一个负号“-”,所表达的含义是从右向左的方向获取元素,可以用[-n]表示,例如:
list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]
# 取出最后一个元素
print(list1[-1])
# 取出“身高178”这个值
print(list1[-1][0])
# 取出倒数第三个元素
print(list1[-3])
结果:
['身高178', '体重72']
身高178
硕士
如果列表元素特别多,而需要获取的数据恰好又是最后几个,那么负向单索引就显得尤为方便和简单,否则从头开始数下去,就显得非常麻烦。注意,最后一个列表元素可以用[-1]表示,千万不要写成[-0],这是初学者容易犯错的地方。
使用**index()**进行特殊值索引。
L = [2,4,5,6,2,6,0,4]
print(L.index(2))
结果:
0
但是Index()只会标注出首次出现特殊值的位置。如果特殊值有多个怎么办?
使用enumerate函数,它不仅可以直接列出位置,还可以列出值
L = [2, 4, 5, 6, 2, 6, 0, 4]
for i, j in enumerate(L):
if j == 2:
print(i,j)
结果:
0 2
4 2
切片索引指的是按照固定的步长,连续取出多个元素,可以用**[start : end : step]**表示。start指索取元素的起始位置;end指索取元素的终止位置(注意,end位置的元素是取不到的!);step指索取元素的步长,默认为1,表示逐个取出一连串的列表元素;切片,你可以把它理解成高中所学的值域范围,属于左闭右开[ , )的效果。例如:
list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']
#取出”浙江“至”山西“四个元素
print(list2[2:6])
#取出“安徽”、“上海”、“山西”三个元素
print(list2[1:6:2])
#取出倒数第二个和第三个元素
print(list2[-3:-1])
#取出最后三个元素
print(list2[-3:])
结果:
['浙江', '上海', '山东', '山西']
['安徽', '上海', '山西']
['山西', '湖南']
['山西', '湖南', '湖北']
无限索引是指在切片过程中不限定起始元素的位置或终止元素的位置,甚至起始和终止元素的位置都不限定,可以用[ ::step]表示。第一个冒号是指从列表的第一个元素开始获取;第二个冒号是指到最后一个元素结束(包含最后一个元素值)。例如:
list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']
# 取出头三个元素
print(list2[:3])
# 取出最后三个元素
print(list2[-3:])
# 取出所有元素
print(list2[::])
# 取出奇数位置的元素
print(list2[::2])
# 取出偶数位置的元素
print(list2[1::2])
# 取出所有元素并倒序打印出来
print(list2[::-1])
结果:
['江苏', '安徽', '浙江']
['山西', '湖南', '湖北']
['江苏', '安徽', '浙江', '上海', '山东', '山西', '湖南', '湖北']
['江苏', '浙江', '山东', '湖南']
['安徽', '上海', '山西', '湖北']
['湖北', '湖南', '山西', '山东', '上海', '浙江', '安徽', '江苏']
如上结果显示,如果需要从头开始返回元素,可以将切片中的start设置为冒号(:);如果需要返回至结尾的元素,可以将切片中的end设置为冒号;当然,start和end都设置为冒号的话,返回的是整个列表元素(等同于复制的功效),再通过step控制步长,实现有规律地跳格取数。
“列表是可变类型的数据结构”指的是可以通过列表特有的“方法”,实现列表元素的增加、删除和修改,一旦通过这些方法完成列表的改操作,列表本身就发生变化了。注意,这里说的是特有的“方法”,而不是函数。
如果需要往列表中增加元素,可使用Python提供的三种方法,即append、extend、+和insert。下面通过例子来解释三者的区别:
append是列表所特有的方法,其他常见对象是没有这个方法的,该方法是往列表的尾部增加元素,而且每次只能增加一个元素。
如果需要一次增加多个元素,该方法无法实现,只能使用列表的extend方法。
例如:
list3 = [1,10,100,1000,10000]
# 在列表末尾添加数字2
list3.append(2)
print(list3)
#在例表末尾添加一个新列表[1,2,3]
list3.append([1,2,3])
print(list3)
结果:
[1, 10, 100, 1000, 10000, 2]
[1, 10, 100, 1000, 10000, 2, [1, 2, 3]]
使用extend方法往列表尾部增加多个元素时,一定要将多个元素捆绑为列表传递给该方法,即使只有一个元素,也需要以列表的形式传递。
extend也可以起到合并列表的功能
list3 = [1,10,100,1000,10000]
# 在列表末尾添加20,200,2000,20000四个值
list3.extend([20,200,2000,20000])
print(list3)
结果:
[1, 10, 100, 1000, 10000, 20, 200, 2000, 20000]
加号+,也能起到类似extend的作用,可以合并两个列表。所以一定要将多个元素捆绑为列表传递给该方法,即使只有一个元素,也需要以列表的形式传递。
例如
list3 = [1,10,100,1000,10000]
# 在列表末尾添加20,200,2000,20000四个值
list4 = [20,200,2000,20000]
list = list3 + list4
print(list)
结果:
[1, 10, 100, 1000, 10000, 20, 200, 2000, 20000]
insert方法可以在列表的指定位置插入新值,该方法需要传递两个参数:
例如:
list3 = [1,10,100,1000,10000]
# 在数字10后面增加11这个数字
list3.insert(2,11) #2是位置索引,表明要插入的位置;11是你要的数值
print(list3)
# 在10000后面插入['a','b','c']
list3.insert(3,['a','b','c']) #3是位置索引,表明要插入的位置;['a','b','c']是你要插入的列表
print(list3)
结果:
[1, 10, 11, 100, 1000, 10000]
[1, 10, 11, ['a', 'b', 'c'], 100, 1000, 10000]
insert的缺点,它会改变与之相关联的列表
list3 = [1,10,100,1000,10000]
list4 = list3
# 在数字10后面增加11这个数字
list4.insert(2,11) #2是位置索引,表明要插入的位置;11是你要的数值
print(list3)
print(list4)
结果:
[1, 10, 11, 100, 1000, 10000]
[1, 10, 11, 100, 1000, 10000]
能往列表中增加元素,就能从列表中删除元素。关于列表元素的删除有三种方法,分别是pop、remove和clear,下面举例说明。
通过pop方法,可以完成列表元素两种风格的删除:
而且都只能删除一个元素。
例如:
list3 = [1,10,100,1000,10000]
# 删除list3中10000这个元素
list3.pop() #默认删除列表的末尾元素
print(list3)
# 删除list3中100这个元素
list3.pop(2) #删除第三个数字
print(list3)
结果:
[1, 10, 100, 1000]
[1, 10, 1000]
remove方法提供了删除指定值的功能,该功能非常棒,但是它只能删除首次出现的指定值。如果你的列表元素特别多,通过pop方法删除指定位置的元素就显得非常笨拙,因为你需要数出删除值的具体位置,而使用remove方法就很方便。
例如:
list3 = [1,10,100,1000,10000]
# 删除list3中100这个元素
list3.remove(100)
print(list3)
list4 = [1, 10, 11, 11, 100, 1000, ['a', 'b', 'c'], 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
#删除list4中的11这个元素
list4.remove(11)
print(list4)
#删除list4中的['a', 'b', 'c']
list4.remove(['a', 'b', 'c'])
print(list4)
结果:
[1, 10, 1000, 10000]
[1, 10, 11, 100, 1000, ['a', 'b', 'c'], 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
[1, 10, 11, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
clear从字面理解就是清空的意思,确实,该方法就是将列表中的所有元素全部删除。如上结果所示,通过clear方法返回的是一个空列表。
例如:
list3 = [1,10,100,1000,10000]
# 删除list3中所有元素
list3.clear()
print(list3)
结果:
[]
如果列表元素值存在错误该如何修改呢?
不幸的是对于列表来说,没有具体的方法可言,但可以使用“取而改之”的思想实现元素的修改。“取而改之”是指先通过错误元素的获取(通过索引的方法),再使用正确的值重新替换即可。正如下面的结果所示,就是用新值替换旧值,完成列表元素的修改。
下面通过具体的例子来加以说明:
list4 = ['洗衣机','冰响','电视机','电脑','空调']
# 将“冰响”修改为“冰箱”
print(list4[1])
list4[1] = '冰箱'
print(list4)
结果:
冰响
['洗衣机', '冰箱', '电视机', '电脑', '空调']
除了上面介绍的列表元素增加和删除所涉及的“方法”外,还有其他“方法”,
如排序、计数、查询位置、逆转:
接下来仍然通过具体的例子来说明它们的用法:
list5 = [7,3,9,11,4,6,10,3,7,4,4,3,6,3]
# 列表元素的降序
list5.sort(reverse=True)
print(list5)
# 计算列表中元素3的个数
print(list5.count(3))
# 找出元素6所在的位置
print(list5.index(6))
# 列表元素的颠倒
list5.reverse()
print(list5)
结果:
[11, 10, 9, 7, 7, 6, 6, 4, 4, 4, 3, 3, 3, 3]
4
5
[3, 3, 3, 3, 4, 4, 4, 6, 6, 7, 7, 9, 10, 11]
1、copy函数
使用上述函数,会使得赋值列表也发生改变
比如:
list1 = [2,4,1,2,7,8,4]
list2 = list1
print(list2)
list1.sort()
print(list1)
print(list2)
结果:
[2, 4, 1, 2, 7, 8, 4]
[1, 2, 2, 4, 4, 7, 8]
[1, 2, 2, 4, 4, 7, 8]
可以使用copy函数解决这个问题
list1 = [2,4,1,2,7,8,4]
list2 = list1.copy()
print(list2)
list1.sort()
print(list1)
print(list2)
结果:
[2, 4, 1, 2, 7, 8, 4]
[1, 2, 2, 4, 4, 7, 8]
[2, 4, 1, 2, 7, 8, 4]
list1 = ['a', 'b', 'c', 'd']
list2 = ['apple', 'boy', 'cat', 'dog']
for x, y in zip(list1, list2):
print(x, 'is', y)
结果:
a is apple
b is boy
c is cat
d is dog
1、set(去重之后会改变顺序)
ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))
print(ids)
结果:
[1, 2, 3, 4, 5, 6]
ids = ['H', 'H', 'B', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'C']
ids = list(set(ids))
print(ids)
结果:
['D', 'F', 'C', 'H', 'B']
2、循环
ids = ['H', 'H', 'B', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'C']
news_ids = []
for id in ids:
if id not in news_ids:
news_ids.append(id)
print(news_ids)
结果:
['H', 'B', 'D', 'F', 'C']
改变顺序:
ids = ['H', 'H', 'H', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'E', 'E', 'D', 'D', 'D', 'F', 'F', 'H', 'B', 'B', 'B', 'C', 'D', 'D', 'I', 'F', 'I', 'F', 'D', 'I', 'F', 'F', 'D', 'F', 'F', 'H', 'F', 'F', 'F', 'F', 'D', 'F', 'D', 'D', 'D', 'K', 'K', 'D', 'I', 'I', 'I', 'D', 'H', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'F', 'K', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'J', 'D']
ids.sort() #重新排序
print(ids)
news_ids = []
for id in ids:
if id not in news_ids:
news_ids.append(id)
print(news_ids)
结果:
['B', 'B', 'B', 'C', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'E', 'E', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'I', 'I', 'I', 'I', 'I', 'I', 'J', 'K', 'K', 'K']
['B', 'C', 'D', 'E', 'F', 'H', 'I', 'J', 'K']
3、import itertools
import itertools
ids = ['H', 'H', 'B', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'C']
ids.sort() #改变顺序
print(ids)
it = itertools.groupby(ids)
for k, g in it:
print(k)
结果:
['B', 'C', 'D', 'D', 'F', 'F', 'F', 'H', 'H', 'H', 'H']
B
C
D
F
H
不改变顺序
import itertools
ids = ['H', 'H', 'B', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'C']
it = itertools.groupby(ids)
for k, g in it:
print(k)
结果:
H
B
H
D
F
D
C
4、reduce函数
from functools import reduce
ids = ['H', 'H', 'B', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'C']
func = lambda x,y:x if y in x else x + [y]
print(reduce(func, [[], ] + ids))
结果:
['H', 'B', 'D', 'F', 'C']
5、用空列表“装数据”
list2 = []
list1 = ids = ['H', 'H', 'B', 'H', 'H', 'D', 'F', 'F', 'F', 'D', 'C']
for i in list1:
if i not in list2:
list2.append(i)
print(list2)
结果:
['H', 'B', 'D', 'F', 'C']
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。