Python数据类型之列表的进阶操作
遍历
重复性的内容需要按照步骤,分步式的读取出来
对文件内容已经有相似结构的循环读取
- for循环
- 魔法推导式
- 常见的错误:缩进错误、遗漏冒号
创建数值列表
- range(参数1,参数2,参数3):包头不包尾
参数1:起始值(包含自己)
参数2:终止值(不包含自己)
参数3:步长(间隔数)- 创建数字列表
- 数字列表的简单统计计算{最大值:max()、最小值:min()、总和:sum() }
切片
把一段数据进行分割
- 遍历切片
- 复制列表(把某一个列表中的数据给别的一个,同样的制造一份出来)
元组
1.元组与列表的区别(列表的值可以修改,元组的值不可修改)
2.定义元组
3.修改元组变量
遍历列表
#定义一个列表
names = ["张三","李四","王五","赵六","田七"]
zhang_san = names[0]
li_si = names[1]
wang_wu = names[2]
print(zhang_san+" "+li_si+" "+wang_wu)
张三 李四 王五
#想要读取某一个值,这样就很麻烦
#使用for循环来读取,重复的有规律的读取内容
for循环
for name in names:
print(name,end=" ")
张三 李四 王五 赵六 田七
#如果是英文的名字,还可以进行一些操作,比如说大小写转换
names2 = ["anlen","bob"]
for name in names2:
print(name.title())
Anlen
Bob
魔法推导式
[name for name in names2]
--------------------------------------------------------------------------------------------------------------
['anlen', 'bob']
常见的错误:
缩进错误
names2 = ["anlen","bob"]
for name in names2:
print(name.title()) #print没有缩进
File "<ipython-input-12-89d8b78a3789>", line 3
print(name.title())
^
IndentationError: expected an indented bloc #提示缩进错误
遗漏冒号
names2 = ["anlen","bob"]
for name in names2 #遗漏冒号
print(name.title())
File "<ipython-input-13-ee6eafbd451b>", line 2
for name in names2
^
SyntaxError: invalid syntax #提示语法错误
创建数值列表
#循环输出1到10
nums = [1,2,3,4,5,6,7,8,9,10]
for num in nums:
print(num,end=" ")
1 2 3 4 5 6 7 8 9 10
#这样会很麻烦,使用range()就会很方便
range(参数1,参数2,参数3):包头不包尾
for num in range(1,11):
print(num,end=" ")
1 2 3 4 5 6 7 8 9 10
#输出1-10之间的偶数
for num in range(2,11,2): #cong2开始每次加2
print(num,end=" ")
#输出1-10之间的奇数
for num in range(1,11,2): #从1开始每次加2
print(num,end=" ")
1 3 5 7 9
#输出奇数的平方
for num in range(1,11,2):
print(num**2,end=" ")
1 9 25 49 81
创建数字列表
numbers = list(range(1,11))
print(numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
数字列表的简单计算
#数字列表的最大值、最小值、总和
print(max(numbers))
print(min(numbers))
print(sum(numbers))
10
1
55
切片
#定义一个列表
pets = ["cat","dog","duck","pig"]
print(pets)
把数据进行分割,截取特定的值
#取开头
pets[0]
'cat'
#中间截取
pets[1:3]
['dog', 'duck']
#全部截取
pets[0:4]
['cat', 'dog', 'duck', 'pig']
#取最后
pets[-1]
'pig'
#从开头到结尾
pets[0:]
['cat', 'dog', 'duck', 'pig']
#从中间某一个到结尾
pets[1:]
['dog', 'duck', 'pig']
遍历切片
for pet in pets[-3:]:
print(pet,end=" ")
dog duck pig
复制列表
games = ['王者','吃鸡','英雄联盟']
#friend_games = ['王者','吃鸡'] //这样代码创重复,是不可取的
friend_games = games[:2]
print('我喜欢的游戏有:'+str(games))
print('我朋友喜欢的游戏有:'+str(friend_games)
我喜欢的游戏有:['王者', '吃鸡', '英雄联盟']
我朋友喜欢的游戏有:['王者', '吃鸡']
元组
#定义列表
nums = [1,2,3]
nums[0] = 9
print(nums)
#定义元组
numbers = (4,5,6)
numbers[0] = 10
print(numbers)
[9, 2, 3]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-9b5931007d67> in <module>
5 #定义元组
6 numbers = (4,5,6)
----> 7 numbers[0] = 10
8 print(numbers[0])
TypeError: 'tuple' object does not support item assignment #tuple是只读,而不支持写
#证明元组的值是不能被修改的
#但它的访问形式和列表一样
print(nums[0])
print(numbers[0])
9
4
for num in numbers:
print(num,end=" ")
4 5 6
给元组变量赋值,打包给它换
print(numbers)
numbers = (0,1,2)
print(numbers)
(4, 5, 6)
(0, 1, 2)
但是有些地方的值是不允许改变的,也不能改变的,比如(性别),这就可以使用元组
sex = ("男","女")
print(sex)
('男', '女') #这个值就是固定的,不能被改,也没法该
在日常生活中,要确定内容是否要进行二次修改来决定使用元组,还是列表
练习
批量生成50个C类IP–192.168.1.x
pre = '192.168.1.'
for ip in list(range(1,51)):
print(pre+str(ip),end= " ")
192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14 192.168.1.15 192.168.1.16 192.168.1.17 192.168.1.18 192.168.1.19 192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.23 192.168.1.24 192.168.1.25 192.168.1.26 192.168.1.27 192.168.1.28 192.168.1.29 192.168.1.30 192.168.1.31 192.168.1.32 192.168.1.33 192.168.1.34 192.168.1.35 192.168.1.36 192.168.1.37 192.168.1.38 192.168.1.39 192.168.1.40 192.168.1.41 192.168.1.42 192.168.1.43 192.168.1.44 192.168.1.45 192.168.1.46 192.168.1.47 192.168.1.48 192.168.1.49 192.168.1.50
for的双重循环使用
使用口诀:
外层循环控制行数
内层循环控制列数
外层循环执行1次,内层循环执行1轮
打印数字直角三角形
for i in range(1,10):
for j in range(i):
print(j+1,end="")
print()
1
12
123
1234
12345
123456
1234567
12345678
123456789
打印九九乘法表
for i in range(1,10):
for j in range(i):
print(str(j+1)+"x"+str(i)+"="+str(i*(j+1)),end=" ")
print()
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81