Python学习笔记(十六) 列表
Python3列表
序列是Python中最基本的数据结构。
序列中的每个元素都分配一个数字 -- 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
1、访问列表中的值
与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。
通过索引列表可以进行截取、组合等操作。
实例
#!/usr/bin/python3
list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[0] )
print( list[1] )
print( list[2] )
以上实例输出结果:
red
green
blue
索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。
实例
#!/usr/bin/python3
list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[-1] )
print( list[-2] )
print( list[-3] )
以上实例输出结果:
black
white
yellow
使用下标索引来访问列表中的值,同样你也可以使用方括号 [] 的形式截取字符,如下所示:
实例
#!/usr/bin/python3
nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
print(nums[0:4])
以上实例输出结果:
[10, 20, 30, 40]
使用负数索引值截取:
实例
#!/usr/bin/python3 list = ['Google', 'Runoob', "Zhihu", "Taobao", "Wiki"] # 读取第二位 print ("list[1]: ", list[1]) # 从第二位开始(包含)截取到倒数第二位(不包含) print ("list[1:-2]: ", list[1:-2])
以上实例输出结果:
list[1]: Runoob
list[1:-2]: ['Runoob', 'Zhihu']
2、更新列表
你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示:
实例(Python 3.0+)
#!/usr/bin/python3
list = ['Google', 'Runoob', 1997, 2000]
print ("第三个元素为 : ", list[2])
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])
注意:我们会在接下来的章节讨论append()方法的使用
以上实例输出结果:
第三个元素为 : 1997
更新后的第三个元素为 : 2001
3、删除列表元素
可以使用 del 语句来删除列表的的元素,如下实例:
实例(Python 3.0+)
#!/usr/bin/python3
list = ['Google', 'Runoob', 1997, 2000]
print ("原始列表 : ", list)
del list[2]
print ("删除第三个元素 : ", list)
以上实例输出结果:
原始列表 : ['Google', 'Runoob', 1997, 2000]
删除第三个元素 : ['Google', 'Runoob', 2000]
注意:我们会在接下来的章节讨论 remove() 方法的使用
4、Python列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
Python 表达式 |
结果 |
描述 |
len([1, 2, 3]) |
3 |
长度 |
[1, 2, 3] + [4, 5, 6] |
[1, 2, 3, 4, 5, 6] |
组合 |
['Hi!'] * 4 |
['Hi!', 'Hi!', 'Hi!', 'Hi!'] |
重复 |
3 in [1, 2, 3] |
True |
元素是否存在于列表中 |
for x in [1, 2, 3]: print(x, end=" ") |
1 2 3 |
迭代 |
5、Python列表截取与拼接
Python的列表截取与字符串操作类型,如下所示:
L=['Google', 'Runoob', 'Taobao']
操作:
Python 表达式 |
结果 |
描述 |
L[2] |
'Taobao' |
读取第三个元素 |
L[-2] |
'Runoob' |
从右侧开始读取倒数第二个元素: count from the right |
L[1:] |
['Runoob', 'Taobao'] |
输出从第二个元素开始后的所有元素 |
>>>L=['Google', 'Runoob', 'Taobao']
>>> L[2] 'Taobao'
>>> L[-2] 'Runoob'
>>> L[1:] ['Runoob', 'Taobao']
>>>
列表还支持拼接操作:
>>>squares = [1, 4, 9, 16, 25]
>>> squares += [36, 49, 64, 81, 100]
>>> squares [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>>
6、嵌套列表
使用嵌套列表即在列表里创建其它列表,例如:
>>>a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x [['a', 'b', 'c'], [1, 2, 3]]
>>> x[0] ['a', 'b', 'c']
>>> x[0][1] 'b'
7、Python列表函数&方法
Python列表包含以下函数:
序号 |
函数 |
1 |
len(list) |
2 |
max(list) |
3 |
min(list) |
4 |
list(seq) |
Python列表包含以下方法:
序号 |
方法 |
1 |
list.append(obj) |
2 |
list.count(obj) 也可以使用from collections import Counter Counter(obj) # 参考链接 |
3 |
list.extend(seq) |
4 |
list.index(obj) |
5 |
list.insert(index, obj) |
6 |
list.pop([index=-1]) |
7 |
list.remove(obj) |
8 |
list.reverse() |
9 |
|
10 |
list.clear() |
11 |
list.copy() |
12 |
对所有可迭代的对象进行排序操作。 sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值, 而内建函数 sorted 方法返回的是一个新的 list,需要一个变量接收返回值,而不是在原来的基础上进行的操作。 sorted 语法: sorted(iterable, cmp=None, key=None, reverse=False) 参数说明: · iterable -- 可迭代对象。 · cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。 · key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 · reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 返回值 返回重新排序的列表。 |
增:
1、list.append(obj) # 末尾追加
3、list.extend(seq) # 扩展
5、list.insert(index, obj) # 插入
删:
6、list.pop(index = -1) # 弹栈
7、list.remove(obj) # 移除
10、list.clear() # 清空
改:
查:
2、list.count(obj) # 计数
4、list.index(obj) # 查找下标
其他:
8、list.reverse() # 反转
9、list.sort(key = None, reverse = False) # 排序(默认升序)
11、list.copy() # 复制
8、列表的定义和获取元素
# 列表声明
names = ['Ironman', 'Hulk', 'Superman', 'Spiderman', 'Batman']
film_name = []
# 列表地址
print(id(names))
print(id(film_name)) # 空列表也有地址
# 获取列表元素:下标 索引
print(names[0])
print(names[1])
# 获取第一个元素,与获取字符串下标方式相同
print(names[0])
print(names[-5])
# 获取最后一个元素
print(names[-1])
print(len(names)) # 计算列表长度
print(names[len(names) - 1])
# 结合循环
# 字符串使用循环
for i in 'hello':
print(i)
print('-----------------')
# 列表使用for循环
for name in names:
print(name)
# 查询names里面有没有Superman
for name in names:
if name == 'Superman':
print('铛铛铛铛,超人登场!')
break
else:
print('超人这次没能来拯救世界!')
# 使用in代替for循环
if 'Superman' in names:
print('铛铛铛铛,超人登场!')
else:
print('超人这次没能来拯救世界!')
brands = ['Hp', 'Dell', 'Thinkpad', '华为', 'Lenovo', 'Mac', '神州']
''' 查 '''
# 打印列表内容
print(brands)
# 获取列表特定下标的值
print(brands[-1])
# 修改特定下标的值
brands[-1] = 'Hasee'
print(brands)
print('----------------------')
''' 改 '''
# 修改“华为”为“HUAWEI”
# for brand in brands:
# if '华为' in brand:
# brand = 'HUAWEI' # 只是修改了变量brand的值,而不是列表中的值
#
# print(brands) # 没有修改成功
#以下标的方式,修改列表中的“华为”的值为“HUAWEI”
for i in range(len(brands)): # 遍历列表中的所有值
if '华为' in brands[i]:
brands[i] = 'HUAWEI'
break # 找到并修改值后,可以使用break不再进行遍历
print(brands) # 修改成功
'''
删除 del -> delete的缩写
Python之__del__()方法:销毁对象
'''
# 删除列表中的一个特定值
del brands[2] # 删除Thinkpad
print(brands)
print('---------------------')
# 删除列表中的多个特定值
# 错误演示,for循环删除
# for i in range(len(brands)):
# if 'Hp' in brands[i] or 'Mac' in brands[i]:
# del brands[i]
#
# print(brands) # 报错:IndexError: list index out of range,原因:因为range的值是固定且不能修改的,在删除列表中的值后,range应该-1
# 正确演示:while循环删除
l = len(brands)
i = 0
while i < l:
if 'Hp' in brands[i] or 'Mac' in brands[i]:
del brands[i]
l -= 1
i += 1
print(brands) # 删除成功
9、for x in y与if x in y及if x == y的区别
'''
for x in y
与
if x in y
及
if x == y
的区别
'''
words = ['hello', 'good', 'apple', 'world', 'digit', 'alpha']
w = input('请输入一个单词:')
# if ... in ...
if w in words:
print('存在单词', w)
# for ... in ...
# 1、for 'abc' in ['abc', 'python', 'aaa'] 遍历字符串abc有没有在列表中
# 2、if 'go' in 'good' 判断字符串go有没有在字符串good中
# 3、if 'app' == 'apple' 判断字符串app是否等于字符串apple
for word in words: # 1、
if w in word: # 2、
# if w == word: # 3、
print('存在单词', w)
break
# 字符串
if 'good' == 'good': # == 比较的是两个内容是否相等
print('相等')
if 'good' in 'goods': # in:成员运算符,应用在字符串判断,也可以用在[]
print('相等或包含')
# 列表
# 形式1
i = 1
if 'good' in ['goods', 'good', 'going', 'gone']:
print('包含good,下标为', i)
i += 1
# 形式2
i = 1
for w in ['goods', 'good', 'going', 'gone']: # for ... in ...遍历列表
# w in goods w in good w in going w in gone
print('good' in w) # True True False False
print('----->', i)
i += 1
10、删除与漏删
words = ['hello', 'good', 'google', 'world', 'alphago']
w = input('请输入一个单词:') # 输入go
i = 0 # i表示下标从0开始
l = len(words)
while i < l:
if w in words[i]:
del words[i]
l -= 1
i += 1
print(words) # 漏删了google
改善后
words = ['hello', 'good', 'google', 'world', 'alphago']
w = input('请输入一个单词:') # 输入go
i = 0 # i表示下标,从0开始
l = len(words)
while i < l:
if w in words[i]:
del words[i]
l -= 1
continue # 增加continue语句,如果执行了if语句,则跳过当前循环,即跳过语句i += 1,就不会再出现漏删问题
# 或者i -= 1,但不推荐
i += 1
print(words)
11、列表的切片操作
'''
列表的切片
'''
list1 = ['童瑶', '江疏影', '毛晓彤', '杨玏', '李泽锋', '杨立新', '马志威']
str = '童瑶 江疏影 毛晓彤 杨玏 李泽锋 杨立新'
print(list1)
print(list1[0])
# 列表也支持切片
# 正向取值,从左向右,小数在前,大数在后
print(list1[ : 3]) # 切片后将截取的结果再次保存在一个新列表中
print(str.split(' ')) # 列表不支持split()分割,字符串才能支持split()分割,分割后将内容存放到新列表中
print(list1[-3 : -1])
# 步长为2
print(list1[ : : 2])
print(list1[-5 : -1 : 2]) # 不包含-1,但是如果想取-1该如何写? 简单,[-5 : : 2]即可
# 反向取值,从右向左,大数在前,小数在后
print(list1[-1 : -8 : -2]) # 注意此处的-8,列表中的下标只有-1 ~ -7
print(list1[-1 : : -2])
12、列表的添加
'''
list列表的添加
'''
girls = ['girls']
# 列表的函数使用:append() extend() insert()
# append() 末尾追加
while True:
name = input('请输入你心目中美女的名字:')
if name == 'quit':
break
girls.append(name)
print(girls)
# extend() 一次添加多个元素,类似列表的合并,可用+号替代
# extend()函数输入的字符串会被分割成多个字符,如输入“童瑶”会被存入列表[‘童’,’瑶’]
names = ['孙红雷', '马冬梅', '刘德华', '古天乐']
print(names)
name = input('请输入你心目中的美女名字:')
girls.extend(names) # 将names列表中的内容合并到girls列表中
# 也可以用+号合并列表
girls += names
print(girls)
# insert() 指定下标插入,被插入元素的下标后移一位
girls.insert(1, '童瑶')
print(girls)
小案例:产生10个随机数,保存到列表中
'''
小案例:产生10个随机数,将其保存到列表中
1、产生10个随机数
2、将产生的随机数存放到列表中
3、打印列表
'''
import random
random_list = []
for i in range(10):
rand = random.randint(1, 50)
random_list.append(rand) # 将随机数追加到列表random_list中
print(random_list)
小案例:产生10个随机数,将不同的10个数保存到列表中
'''
小案例:产生10个随机数,将其不同的数保存到列表中
1、产生10个随机数
2、判断列表中是否有相同的数,如果没有则保存到列表中
3、打印列表
'''
import random
random_list = []
i = 0
while i < 10:
rand = random.randint(1, 50)
if rand not in random_list:
random_list.append(rand)
i += 1
print(random_list)
Python列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。
它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。
那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。
列表推导式的执行顺序:
各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。
[x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]
他的执行顺序是:
list_b = []
for x in range(1,5):
if x > 2:
for y in range(1,4):
if y < 3:
list_b.append(x*y)
结果是:[3, 6, 4, 8]
'''
Python列表推导式(list comprehension)
列表推导式是指使用循环来创建列表
列表推导式是Python构建列表的一种快捷方式,可以使用简洁的代码创建一个列表。
列表推导式是通过一个可迭代对象来生成列表的,range()可以说是列表推导式中最常用的可迭代对象了。
对列表推导式来说,range()可以提高列表推导式的可读性和间接性。
'''
# 列表推导式
list_a = [x * y for x in range(1, 5) if x > 2 for y in range(1, 4) if y < 3]
print(list_a)
# 它的执行顺序是:
list_b = []
for x in range(1, 5):
if x > 2:
for y in range(1, 4):
if y < 3:
list_b.append(x * y)
print(list_b)
# for循环创建列表
list1 = list() # 创建空列表
for i in range(5):
list1.append(i)
print(list1)
# 列表推导式创建列表
list2 = [b for b in range(5)]
print(list2)
### 复杂一点的列表推导式
# in后面跟随其他可迭代对象,如字符串
list3 = [5 * c for c in 'python']
print(list3)
# 带if条件语句的列表推导式
list4 = [d for d in range(6) if d % 2 != 0]
print(list4)
# 多个for循环的列表推导式
list5 = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
print(list5)
# 上 等价于 下
list_e = [] # 创建空列表
for e in range(3):
for f in range(5, 15, 5): # f = 5, 10
list_e.append((e, f * f))
print(list_e)
# 嵌套列表推导式,多个并列条件
list6 = [[x for x in range(g - 3, g)] for g in range(12) if g % 3 == 0 and g != 0]
print(list6)
# 上 等价于 下
list_f = list() # 创建空列表
for g in range(12):
if g % 3 == 0 and g != 0: # g = 3、6、9
y = []
for x in range(g - 3, g): # range(0, 3) range(3, 6) range(6, 9)
y.append(x)
list_f.append(y)
print(list_f)
'''字典推导式'''
# 因为key是唯一的,所以最后value都是1
dict_a = {key: value for key in 'python' for value in range(4)}
print(dict_a)
# {'p': 3, 'y': 3, 't': 3, 'h': 3, 'o': 3, 'n': 3}
# 可以根据键来构造值
dict_b = {key: key * key for key in range(6)}
print(dict_b)
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 遍历一个有键值关系的可迭代对象
list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
print(dict_c)
# {'HUAWEI': '华为', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}
dict_d = {key: value for key, value in enumerate(list_phone)}
print(dict_d)
# {0: ('HUAWEI', '华为'), 1: ('MI', '小米'), 2: ('OPPO', 'OPPO'), 3: ('VIVO', 'VIVO')}
'''集合推导式'''
# 集合是无序且重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样
set_a = {value for value in '有人风轻云淡,有人负重前行。'}
print(set_a)
# {',', '轻', '重', '负', '行', '有', '风', '云', '前', '。', '人', '淡'}
- 点赞
- 收藏
- 关注作者
评论(0)