目录标题
总体 要讲的大纲内容 如下
-
数字类型- int float complex
-
字符串类型 Text Sequence Type- str
-
序列类型 - list tuple range
-
上下文管理器类型 - 比较复杂暂时 不用掌握
-
二进制序列类型 bytes bytesarray memoryview
-
真值检测
-
比较运算符
-
逻辑运算符
-
如何判断 一个对象 是什么类型- type(xxx)
今天 继续讲 基础类型,这篇内容还是偏多的,我准备给大家介绍python 最常用的几种 数据类型。
希望可以好好 敲敲代码,随后代码的量 也会偏多,所以要跟上练习才行哦。咱们直接进入正题
列表 list
首先明白 什么list , 为啥会有list ?
还记得之前 我们学习str 类型的时候 通过 str.split 方法生成了一个list 类型吗?
>>> numbs = 'one,two,three,four'.split(',')
>>> type(numbs)
<class 'list'>
>>> numbs
['one', 'two', 'three', 'four']
list 中可以存放 一系列的元素,这里可以是 str 类型,也可以是其他任何你想放入的类型都是可以的。 list 你可以认为 他是一个有位置的盒子,盒子里面已经有相应的序号,来存放一些任何你想放入的元素。list 会记录这些元素的顺序 。 list中每个元素都会有 ‘位置’ 的概念 。
有几点 要说明:
- list 中每个元素都是有自己的位置信息的。
- list 中的每个元素 可以是不同的类型,比如 int ,float ,str ,list .
- list 中 的元素是可以修改的 ,也是说list 中的元素可以被 改变值的.
- list 中没有一个元素 也是可以的, 这个时候 是 空list .
让我们来感受如何创建一个list
创建一个 空的list , 以及创建一个 有元素的list ,list 也可以通过 len 的方式获取list 中的元素个数
>>> nums = []
>>> type(nums)
<class 'list'>
>>> nums =[1,2,3,4,5]
>>> type(nums)
<class 'list'>
>>> # 可以存放不同的数据类型
>>> boxes =[1,2,'frank',bytes('aaa',encoding='utf8')]
>>> boxes
[1, 2, 'frank', b'aaa']
>>> type(boxes)
<class 'list'>
获取list 的元素个数
>>> nums = []
>>> len(nums)
0
>>> nums2 =[1,2,3,4,5]
>>> len(nums2)
5
list中比遍历元素
如何 访问 列表中的每一个元素呢?
nums = ['one', 'two', 'three', 'four', 'five', 'six']
for num in nums:
print(num)
"""结果如下
one
two
three
four
five
six
"""
这里 for 语句 可以遍历list 语法就像上面的列子,
还有 nums 后面 还一个冒号的东东。
for num in nums:
pass
print(nums)
其中 num 就是将要访问的元素, 第二行print ,前面留出4个空格.
你可能会有疑问? 为啥要留出空格呢? 空格的作用是什么?
其实 遍历这个过程 其实需要6次访问 这个列表,每一次从列表中拿出一个元素,然后再拿下一个元素 。
首先计算机执行代码 ,一般都是从上到下 依次 执行 (一般情况),计算机 要知道 你的下一行代码 是在for 循环里面,还是 在for语句的下面。
nums = ['one', 'two', 'three', 'four', 'five', 'six']
for num in nums:
print(num)
print('aaa')
print('hello world')
有了缩进 计算机 就知道 ,print(‘aaa’) 和print(‘hello world’) 是在不同的代码段,就能区分开来 。
hello world 这一行 就会 在 nums 被访问完之后 才执行 。
我这样讲 不知道有没有理解 。 通过缩进,计算机 就可以知道哪一块代码在一个层级。
>>> for i in [1,2,3]:
... print(i)
... print('hahaha')
... print('for finished')
1
hahaha
2
hahaha
3
hahaha
for finished
好现在,现在接触了一个python 语法 for 语句,还记得字符串类型吗? 这种类型也可以用for 语句哦。
>>> name = 'frank'
>>> for char in name:
... print(char)
...
f
r
a
n
k
其实在python 很多东西都可以for 的。 以后再慢慢聊 。
这里可以先告诉你 只要是可迭代的对象 都是可以用 for 的 。
list 中的 位置概念
比如list 中有一些数字。 nums 里面 1 到8 ,这里 我用了一个range 来生成了一组数字
>>> nums =list(range(1,9))
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]
这个时候 计算机 已经知道每个数字的位置 。举个例子 计算机 知道0 号’位置’ 是数字1 , 3号’位置’ 是数字4
8号’位置’ 不存在 。
在计算机 ,更准确的说法 叫索引 index, 并且是从零开始的,不是从1开始的。
>>> nums[0]
1
>>> nums[3]
4
>>> nums[7]
8
>>> nums[8]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range
好,下面正式介绍一下 索引,在 list 中 有两种索引 一种叫做 正数索引,即从0开始 一直加1 到最后一个元素。
还有一种索引 是负数索引,从最后一个位置 为-1,从右向左 一次减1 ,直到第一个元素 。看下面 的图形。
第一行就是正数索引,第二行 就是负数索引。
这样的话,我们就可以通过索引访问 对应位置的元素。
来看下负数索引,-1位置 对应的值为8 , -2 位置对应的7, -8 位置对应的值 1。
就是说 我们有一种索引 来访问同一个元素 。 就这个例子而言 位置 5 和 位置-3 是同一个元素, 位置0 和-8 是同一个元素
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]
>>> nums[-1]
8
>>> nums[-2]
7
>>> nums[-9]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range
>>> nums[-7]
2
>>> nums[-8]
1
>>> nums[5]
6
>>> nums[-3]
6
list 中 切片概念引入
什么是切片呢? 就是 可以切一段数据的东西。 比如还是nums 我想获取 2-5 这一段的数字的list
>>> nums= [1, 2, 3, 4, 5, 6, 7, 8]
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]
>>> nums[1:5]
[2, 3, 4, 5]
>>> nums[0:2]
[1, 2]
你发现什么规律了吗?
nums[a:b] 是获取 a<= i<b 这一段索引的数据。左闭右开的区间。 当然也可以用负数索引
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]
>>> nums[-6:-3]
[3, 4, 5]
>>> nums[1:4]
[2, 3, 4]
list 中添加元素
append 每次 在最后添加一个元素
insert 两种方式 可以指定要插入的位置 。insert(i, 元素), 元素插入到i 位置,
如果你插入的位置 没有的话, 默认 会放在最后的位置插入这个元素
>>> fruits = []
>>> fruits.append('apple')
>>> fruits
['apple']
>>> fruits.append('orange')
>>> fruits
['apple', 'orange']
>>> fruits.append('banana')
>>> fruits
['apple', 'orange', 'banana']
>>> # 将zero 插入到 0号位置
>>> fruits.insert(0,'zero')
>>> fruits
['zero', 'apple', 'orange', 'banana']
>>> fruits.insert(3,'three')
>>> fruits
['zero', 'apple', 'orange', 'three', 'banana']
>>> ##
>>> fruits=['zero', 'apple', 'orange']
>>> len(fruits)
3
>>> fruits.insert(10,'AAA')
>>> fruits
['zero', 'apple', 'orange', 'AAA']
list 中删除元素
del list[i] 删除 索引为 i的元素。 如果没有这个索引,会报错的 IndexError。
pop(index) 删除一个元素,可以指定一个索引位置删除 如果没有指定就删除最后一个,并且 最后返回这个删除的元素,
如果是一个 空的列表 那么 会抛出一个 IndexError .
remove (元素) 删除一个元素,如果这个元素不在list,中会报错的, ValueError
>>> fruits= ['zero', 'apple', 'orange', 'AAA']
>>> fruits.pop()
'AAA'
>>> fruits
['zero', 'apple', 'orange']
>>> fruits.pop()
'orange'
>>> fruits
['zero', 'apple']
>>> fruits.pop()
'apple'
>>> fruits
['zero']
>>> fruits.pop()
'zero'
>>> fruits
[]
>>> fruits.pop()
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: pop from empty list
>>> fruits= ['zero', 'apple', 'orange', 'AAA']
>>> fruits.pop(1)
'apple'
>>> fruits
['zero', 'orange', 'AAA']
remove
>>>
>>> fruits= ['zero', 'apple', 'orange', 'AAA']
>>> fruits.remove(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> fruits.remove('orange')
>>> fruits
['zero', 'apple', 'AAA']
del 删除元素
>>> fruits= ['zero', 'apple', 'orange']
>>> del fruits[1]
>>> fruits
['zero', 'orange']
list 中修改元素 或者 替换
直接 通过 索引 获取那个元素 进行复制就可以了。
>>> fruits = ['apple', 'orange', 'banana']
>>> fruits[0]='pear'
>>> fruits
['pear', 'orange', 'banana']
list 中 清空 列表
clear
>>> fruits = ['apple', 'orange', 'banana']
>>> fruits.clear()
>>> fruits
[]
list 中常用方法介绍
排序 sort
默认是升序 ,也可以降序 ,指定 reverse 参数 即可 , list.sort(reverse=True) , 注意这里也是原地排序,直接改变list中的元素位置。
>>> nums= [3, 5, 2, 0, 8, 1, 4, 6, 7]
>>> nums.sort()
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8]
翻转 reverse
原地翻转 list 的元素 。
>>> nums = [1,2,3,4]
>>> nums.reverse()
>>> nums
[4, 3, 2, 1]
合并两个列表 extend
有两个列表 ,希望另一个列表的内容 放到自己的列表中,可以用 extend
这个方法 和 append 是有区别的。
>>> nums = [1,2,3]
>>> nums2 = [7,8,9]
>>> nums.extend(nums2)
>>> nums
[1, 2, 3, 7, 8, 9]
append 会把 另一个元素 作为一个元素,放在 列表的最后一个位置。
>>> nums = [1,2,3]
... nums2 = [7,8,9]
>>>
>>> nums.append(nums2)
>>> nums
[1, 2, 3, [7, 8, 9]]
copy 一个列表
这里 用的拷贝 是一个浅拷贝 ,你可能 不能理解,什么叫浅拷贝 ,什么叫深拷贝 。 有时间 我在仔细说下这个问题 。
>>> nums = [1,2,3]
>>> nums.copy()
[1, 2, 3]
>>> nums2=nums.copy()
>>> nums2
[1, 2, 3]
如何查看 两个列表是不是同一个呢? 在python中 可以用 id() ,来查看这个内存地址 。
内存地址 ,就是计算机所有的代码能够运行,就是因为 代码都会跑到内存里面,同时内存 是有一个地址标识的,这样计算机 才能找到这个 变量。
来看下例子
>>> nums
[1, 2, 3]
>>> nums2=nums.copy()
>>> nums3 = nums
>>> id(nums),id(nums3),id(nums2)
(2029581317256, 2029581317256, 2029581788168)
从上面的结果 nums3 和nums 的id 值 是一样的,说明这两个 是同一个列表, 而通过copy 的nums2 的id 值 则和他们不一样 ,说明 nums2 和他们不一样的。
range 对象
用range 可以方便 快速的构造一组数。 python3中 range 的返回值是一个对象,并且这个对象可以迭代, 简单来说 就是可以for
range 非常方便的生成一组数据。 range 返回的是一个对象。需要用 list 方法变成一个列表。
range(start, stop[, step]) 有三个参数
start 开始的数(包含), 默认值是 0
stop 结束的数 (不包含)
step 步长 默认值 为1
>>> r = range(5)
>>> type(r)
<class 'range'>
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(7))
[0, 1, 2, 3, 4, 5, 6]
指定start 值
>>> list(range(2,6))
[2, 3, 4, 5]
>>> list(range(3,8))
[3, 4, 5, 6, 7]
指定步长
>>> list(range(1,9,2))
[1, 3, 5, 7]
>>> list(range(1,9,3))
[1, 4, 7]
总结
今天 主要讲了 python 中的两种类型 list, 和range 这个这些基本的用法,可能有点多,之后要好好看下。
然后 学到了一个语法 for 的简单使用 可以遍历list . 加油!