01-Python 中的数据类型-03-列表,range

总体 要讲的大纲内容 如下

  • 数字类型- int float complex

  • 字符串类型 Text Sequence Type- str

  • 序列类型 - list tuple range

  • 集合类型 - set frozenset

  • 上下文管理器类型 - 比较复杂暂时 不用掌握

  • 二进制序列类型 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个空格.

list-img-03

你可能会有疑问? 为啥要留出空格呢? 空格的作用是什么?

其实 遍历这个过程 其实需要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 ,直到第一个元素 。看下面 的图形。

第一行就是正数索引,第二行 就是负数索引。

这样的话,我们就可以通过索引访问 对应位置的元素。

img-list-04

来看下负数索引,-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 . 加油!

参考文档

list doc

分享快乐,留住感动. 2020-03-19 22:57:24 --frank
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章