写给小白的Python之006:数据类型之列表
2018-06-18 02:14:13来源:未知 阅读 ()
导读:
1.列表
2.列表的方法
3.列表的遍历
4.列表当栈和队列
5.列表推导式
6.列表嵌套
7.del语句
一、列表
list(列表) 是Python中使用最频繁的数据类型,在其他语言中通常叫做 数组。列表是写在方括号之间、用逗号分隔开的元素列表。索引从0开始。
列表的格式为:[元素1,元素2,元素3…]
注意:从列表中取值时,如果 超出索引范围,程序会报错。
列表中元素的类型可以不相同:
>>> a = ['him', 25, 100, 'her']
>>> print(a)
['him', 25, 100, 'her']
和字符串一样,列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。
列表还支持串联操作,使用+操作符:
>>> a = [1, 2, 3, 4, 5]
>>> a + [6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
与Python字符串不一样的是,列表中的元素是可以改变的:
>>> a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9
>>> a[2:5] = [13, 14, 15]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = [] # 删除
>>> a
[9, 2, 6]
尽管 Python 的 列表 中可以 存储不同类型的数据,但是在开发中,更多的应用场景是:
1.列表 存储相同类型的数据;
2.通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作。
要点:
1、list写在方括号之间,元素用逗号隔开。
2、和字符串一样,list可以被索引和切片。
3、list可以使用+操作符进行拼接。
4、list中的元素是可以改变的。
二、列表的方法
分类 |
关键字 / 函数 / 方法 |
说明 |
增加 |
列表.insert(索引, 数据) |
在指定位置插入数据 |
|
列表.append(数据) |
在末尾追加数据 |
|
列表.extend(列表2) |
将列表2 的数据追加到列表 |
修改 |
列表[索引] = 数据 |
修改指定索引的数据 |
删除 |
del 列表[索引] |
删除指定索引的数据 |
|
列表.remove[数据] |
删除第一个出现的指定数据 |
|
列表.pop |
删除末尾数据 |
|
列表.pop(索引) |
删除指定索引数据 |
|
列表.clear |
清空列表 |
统计 |
len(列表) |
列表长度 |
|
列表.count(数据) |
数据在列表中出现的次数 |
排序 |
列表.sort() |
升序排序 |
|
列表.sort(reverse=True) |
降序排序 |
|
列表.reverse() |
逆序、反转 |
list.append(x)
在列表的尾部添加一个项,等价于 a[len(a):] = [x] 。
demo:
#定义变量A,默认有3个元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
print("-----添加之前,列表A的数据-----")
for tempName in A:
print(tempName)
#提示、并添加元素
temp = input('请输入要添加的学生姓名:')
A.append(temp)
print("-----添加之后,列表A的数据-----")
for tempName in A:
print(tempName)
结果:
-----添加之前,列表A的数据-----
xiaoWang
xiaoZhang
xiaoHua
请输入要添加的学生姓名:salmond
-----添加之后,列表A的数据-----
xiaoWang
xiaoZhang
xiaoHua
salmond
list.extend(L)
将给定的列表L接到当前列表后面,等价于 a[len(a):] = L 。
>>> a = [1, 2]
>>> b = [3, 4]
>>> a.append(b)
>>> a
[1, 2, [3, 4]]
>>> a.extend(b)
>>> a
[1, 2, [3, 4], 3, 4]
list.insert(i, x)
在给定的位置 i 前插入项,例如:a.insert(0, x) 会在列表的头部插入,而 a.insert(len(a), x) 则等价于a.append(x)。
>>> a = [0, 1, 2]
>>> a.insert(1, 3)
>>> a
[0, 3, 1, 2]
list.remove(x)
移除列表中第一个值为 x 的项,没有的话会产生一个错误。
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
print('------删除之前------')
for tempName in movieName:
print(tempName)
movieName.remove('指环王')
print('------删除之后------')
for tempName in movieName:
print(tempName)
结果:
------删除之前 - -----
加勒比海盗
骇客帝国
第一滴血
指环王
霍比特人
速度与激情
------删除之后 - -----
加勒比海盗
骇客帝国
第一滴血
霍比特人
速度与激情
list.pop([i])
删除列表给定位置的项,并返回它。如果没有指定索引, a.pop() 移除并返回列表的最后一项。(方括号表示可选)。
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情'] print('------删除之前------') for tempName in movieName: print(tempName) movieName.pop() print('------删除之后------') for tempName in movieName: print(tempName)
结果:
------删除之前 - -----
加勒比海盗
骇客帝国
第一滴血
指环王
霍比特人
速度与激情
------删除之后 - -----
加勒比海盗
骇客帝国
第一滴血
指环王
霍比特人
list.clear()
删除列表中的所有项 。
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情'] print('------删除之前------') for tempName in movieName: print(tempName) movieName.clear() print('------删除之后------') for tempName in movieName: print(tempName)
结果:
------删除之前 - -----
加勒比海盗
骇客帝国
第一滴血
指环王
霍比特人
速度与激情
------删除之后 - -----
list.index(x,start,end)
返回列表中第一个值为 x 的项的索引。如果没有匹配的项, 则产生一个错误。左闭右开
list.count(x)
返回列表中 x 出现的次数。
>>> a = ['a', 'b', 'c', 'a', 'b']
>>> a.index('a', 1, 3) # 注意是左闭右开区间
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'a' is not in list
>>> a.index('a', 1, 4)
3
>>> a.count('b')
2
>>> a.count('d')
0
list.sort()
就地完成列表排序(升序)。
list.sort(reverse=True)
就地完成列表排序(降序)。
list.reverse()
就地完成列表项的翻转。
>>> a = [1, 4, 2, 3]
>>> a.reverse()
>>> a
[3, 2, 4, 1]
>>> a.sort()
>>> a
[1, 2, 3, 4]
>>> a.sort(reverse=True)
>>> a
[4, 3, 2, 1]
三、列表的遍历
遍历 就是 从头到尾 依次 从 列表 中获取数据;在 循环体内部 针对 每一个元素,执行相同的操作。
在 Python 中为了提高列表的遍历效率,专门提供的 迭代 iteration 遍历。
使用 for 就能够实现迭代遍历:
# for 循环内部使用的变量 in 列表
for name in name_list:
循环内部针对列表元素进行操作
print(name)
demo:
namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua'] for name in namesList: print(name)
结果:
xiaoWang
xiaoZhang
xiaoHua
demo:
namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua'] length = len(namesList) i = 0 while i < length: print(namesList[i]) i += 1
结果:
xiaoWang
xiaoZhang
xiaoHua
带下标的遍历
第1种方法:
chars = ['a', 'b', 'c', 'd'] i = 0 for chr in chars: print("%d %s"%(i, chr)) i += 1
结果:
0 a
1 b
2 c
3 d
第2种方法:enumerate()
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
chars = ['a', 'b', 'c', 'd'] for i, chr in enumerate(chars): print (i, chr)
结果:同上
四、列表当栈和队列
1. 列表当栈
list的方法使得其可以很方便地作为一个栈来使用。我们知道,栈的特点是最后进入的元素最先出来(即后入先出),用 append() 方法进行压栈,用不指定索引的 pop() 方法进行出栈。
示例:
stack = [] for x in range(1,6): stack.append(x) # 入栈 print('push', x, end=' ') print(stack) print('Now stack is', stack) while len(stack)>0: print('pop', stack.pop(), end=' ') # 出栈 print(stack)
2. 列表当队列
列表还可以当作队列来使用,队列的特性是第一个加入的元素第一个取出来(即先入先出)。然而,把列表当队列使用效率并不高,因为从列表的尾部添加和弹出元素是很快的,而在列表的开头插入或弹出是比较慢的(因为所有元素都得移动一个位置)。
要实现一个队列, 使用标准库的collections.deque, 它被设计成在两端添加和弹出都很快。示例:
from collections import deque queue = deque() # 创建空队列 for x in range(1,6): queue.append(x) # 入队 print('push', x, end=' ') print(list(queue)) print('Now queue is', list(queue)) while len(queue)>0: print('pop', queue.popleft(), end=' ') # 出队 print(list(queue))
五、列表推导式
所谓的列表推导式,就是指的轻量级循环创建列表。列表推导式提供了从序列创建列表的简单途径。通常程序会对序列的每一个元素做些操作,并以其结果作为新列表的元素,或者根据指定的条件来创建子序列。
列表推导式的结构是:在一个方括号里,首先是一个表达式,随后是一个 for 子句,然后是零个或更多的 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。
示例:
squares = [x**2 for x in range(10)] # 推导式 print(squares)
# 输出是[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
pairs = [(x, y) for x in [1,2,3] for y in [3,1,4] if x!=y] # 推导式 print(pairs)
# 输出是[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
列表生成式也可以使用两个变量来生成 list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']
把一个 list 中所有的字符串变成小写:
>>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']
案例:
修改列表生成式,通过添加 if 语句保证列表生成式能正确地执行:
L1 = ['Hello', 'World', 18, 'Apple', None] L2 = [i for i in L1 if isinstance(i, str)] print(L2)
# 输出: ['hello', 'world', 'apple']
六、列表嵌套
Python中并没有二维数组的概念,但我们可以通过列表嵌套达到同样的目的。
mat = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
同样,我们可以使用推导式生成嵌套的列表:
mat = [[1,2,3], [4,5,6], [7,8,9]] new_mat = [ [row[i] for row in mat] for i in [0,1,2] ] # 嵌套 print(new_mat) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
七、附:del语句
del 语句可以通过给定索引(而不是值)来删除列表中的项,它与返回一个值的pop()方法不同。del语句也可以移除列表中的切片,或者清除整个列表 :
lst = [1,2,3,4,5,6,7,8,9] del lst[2] # 删除指定索引项 print(lst) # [1,2,4,5,6,7,8,9] del lst[2:5] # 删除切片 print(lst) # [1,2,7,8,9] del lst[:] # 删除整个列表 print(lst)
# 在日常开发中,要从列表删除数据,建议 使用列表提供的方法。
del关键字本质上是用来将一个变量从内存中删除的。在删除变量实体之后再引用该变量的话会产生错误。
del用于删除变量实体:
del lst
八、练习题:列表
从今天起,每篇的练习题都会在本篇中给出。希望各位看官,先把练习题做一遍,再看答案。
练习1:
请写出一段 Python 代码实现分组一个 list 里面的元素,比如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]
练习题2:工位随机分配
一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配。
------------------以下为答案----------------以下为答案----------------以下为答案----------------
练习题1参考答案:
a = [x for x in range(1,101)]
b = [a[x:x+3] for x in range(0,len(a),3)]
练习题2参考答案:
#encoding=utf-8 import random # 定义一个列表用来保存3个办公室 offices = [[],[],[]] # 定义一个列表用来存储8位老师的名字 names = ['A','B','C','D','E','F','G','H'] i = 0 for name in names: index = random.randint(0,2) offices[index].append(name) i = 1 for tempNames in offices: print('办公室%d的人数为:%d'%(i,len(tempNames))) i+=1 for name in tempNames: print("%s"%name,end='') print("\n") print("-"*20)
运行结果如下:(结果是随机的)
办公室1的人数为:1
C
--------------------
办公室2的人数为:3
ADG
--------------------
办公室3的人数为:4
BEFH
--------------------
写给小白的Python之005:语句练习题答案
1. 使用if,编写程序,实现以下功能:
_ 从键盘获取用户名、密码
_ 如果用户名和密码都正确(预先设定一个用户名和密码),那么就显示“欢迎进入xxx的世界”,否则提示密码或者用户名错误
username=input('请输入用户名:') password=input('请输入密码:') if username=='ma' and password=='1234': print('欢迎进入%s的世界'%username) elif username=='ma' and password!='1234': print('密码错误') elif username!='ma' and password=='1234': print('用户名错误') else: print('用户名和密码错误')
2.BMI 计算
输入一个人的身高(m)和体重(kg),根据BMI公式(体重除以身高的平方)计算他的BMI指数。
* 例如:一個52公斤的人,身高是155cm,则BMI为 :`52(kg)/1.55^2(m)= 21.6`
* BMI指数:
```
低于18.5:过轻
18.5-25:正常
25-28:过重
28-32:肥胖
高于32:严重肥胖
```
# 获取数据 height = float(input("请输入您的身高(m)")) weight = int(input("请输入您的体重(kg):")) # 计算 BMI 指数值 bmi = weight / (height ** 2) print("您的 BMI 指数为: %f" % bmi) # 判断 if bmi <= 18.5: print("过轻") elif bmi < 15: print("正常") elif bmi < 28: print("过重") elif bmi < 32: print("肥胖") else: print("严重肥胖")
3.个人所得税
编写一个程序计算个人所得税(以下为个人所得税税率表,3500元起征):
```
应纳税所得额(含税) 税率(%)
不超过1500元的 3
超过1500元至4,500元的部分 10
超过4,500元至9,000元的部分 20
超过9,000元至35,000元的部分 25
超过35,000元至55,000元的部分 30
超过55,000元至80,000元的部分 35
超过80,000元的部分 45
```
income = float(input("请输入你的收入:")) START = 3500 a = income - START if a > 0: if a <= 1500: tax = a * 0.03 elif a <= 4500: tax = (a-1500) * 0.1 + 1500 * 0.03 elif a <= 9000: tax = (a-4500) * 0.2 + 3000 * 0.1 + 1500 * 0.03 elif a <= 35000: tax = (a-9000) * 0.25 + 4500 * 0.2 + 3000 * 0.1 + 1500 * 0.03 elif a <= 55000: tax = (a-35000) * 0.3 + (35000 - 9000) * 0.25 + 4500 * 0.2 + 3000 * 0.1 + 1500 * 0.03 elif a <= 80000: tax = (a-55000) * 0.35 + (55000 - 35000) * 0.3 + (35000 - 9000) * 0.25 + 4500 * 0.2 + 3000 * 0.1 + 1500 * 0.03 else: tax = (a-80000) * 0.45 +(80000 - 55000) * 0.35 + (55000 - 35000) * 0.3 + (35000 - 9000) * 0.25 + 4500 * 0.2 + \ 3000 * 0.1 + 1500 * 0.03 print("你的收入为:%.02f,个人所得税为:%.02f" % (income, tax)) else: print("穷逼")
结果:
请输入你的收入:25000
你的收入为:25000.00,个人所得税为:4370.00
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash