Python数据类型之列表的进阶操作

遍历

重复性的内容需要按照步骤,分步式的读取出来

对文件内容已经有相似结构的循环读取

  1. for循环
  2. 魔法推导式
  3. 常见的错误:缩进错误、遗漏冒号

创建数值列表

  1. range(参数1,参数2,参数3):包头不包尾
    参数1:起始值(包含自己)
    参数2:终止值(不包含自己)
    参数3:步长(间隔数)
  2. 创建数字列表
  3. 数字列表的简单统计计算{最大值:max()、最小值:min()、总和:sum() }

切片

把一段数据进行分割

  1. 遍历切片
  2. 复制列表(把某一个列表中的数据给别的一个,同样的制造一份出来)

元组

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