Python基础语法(三)

1. 数值型数据结构

1.1 要点

在之前的博客也有提到,数值型数据结构在这里就不过多介绍了。在这里提及一些需要知道的知识点。

  • int、float、complex、bool都是类,1\3.14\2+3j都对象(即实例)。这也符合Python一切皆对象的原则。
  • int: 在Python3中,int就是长整型,理论上支持无限大的数字,但是受限于内存区域的大小。
  • float: 由整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型。浮点型往往不能精确表示一个数,比如π这样的无理数,它只能尽量靠近。
  • bool:int的子类,也就是说int有的特性它也有,可以跟整型进行计算。仅有两个实例True、False,对应1和0。

1.2 类型转换

  • int(x):返回一个整数
  • float(x):返回一个浮点数
  • complex(x) complex(x,y):返回一个复数
  • bool(x):返回一个布尔值,在前面的Python基础语法(二)中的3.2.2里面已经提及,这里不再赘述。
num1 = 1234	# 一个整数
num2 = 3.14159 # 一个浮点数 print(float(num1)) # 整数转浮点数
print(int(num2)) # 浮点数转整数
print(complex(num1)) # 整数转复数
print(bool(num2)) # 整数转布尔值
---------------------------------------
1234.0
3
(1234+0j)
True

1.3 进制转换

  • bin(x):返回一个二进制数
  • otc(x):返回一个八进制数
  • hex(x):返回一个十六进制数

注意,返回的是一个字符串,不能当做数字使用

print(bin(10))
print(oct(10))
print(hex(20))
-------------
0b1010
0o12
0x14

1.4 数字处理相关函数

1.4.1 取整

在处理数字时,往往需要对数字进行取整或者四舍五入等操作,这时候可以用math库来对数据进行处理

import math

print(math.floor(2.5))		# math.floor()函数向下取整
print(math.ceil(2.5)) # math.ceil()函数向上取整
print(round(2.51)) # round()函数四舍六入,注意,是四舍六入
print(round(2.5))
print(round(2.4))
----------------------
2
3
3
2
2

关于round()很多同学会觉得奇怪,为什么是四舍六入,我们平时不是四舍五入的吗?这里,是因为在Python3的文档中规定了小数距离哪个数更近就往哪边取整,至于0.5,就向偶数取整。有关于这个函数的说明可以点击这里查看。建议尽量避免使用这个函数,免得出问题。

1.4.2 最大值与最小值

在一组数中,我们可能需要取最大值或者最小值,使用max()函数可以取最大值,min()函数取最小值。

list = [1,3,2,9,6,4,5,0]
print(min(list)) # min()函数取最小值
print(max(list)) # max()函数取最大值
--------------------------------------
0
9

1.4.2 特殊数值

有时候我们需要定义一些特殊值进行计算,比如π、常数e等等。

import math
print(math.pi) # math.pi返回π的近似值
print(math.e) # math.e返回常数e的近似值
---------------------
3.141592653589793
2.718281828459045

1.5 类型判断

  • type(obj),返回obj的类型,不是字符串
  • isinstance(obj, classinfo),返回布尔值

首先介绍type()函数,它返回的是数据类型

a = 5
b = 'hello'
print(type(a))
print(type(b))
--------------
<class 'int'>
<class 'str'>

那么如何做类型判断呢?请看下面例子

a = 5
b = 'hello'
if type(a)==int:
print(True)
if type(b)==str:
print(True)
-----------------
True
True

isinstance(obj,classinfo)用作判断obj(对象或实例)是否等于classinfo(直接或间接类名、基本类型或者由它们组成的元组)。

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True
True

isinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。
  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

2 列表list

  • 一个队列,一个排列整齐的队伍,它是有序的。
  • 列表内的个体称为元素item,由若干个元素有序地排列组成列表。
  • 元素可以是任意对象(数字、字符串、对象、列表等)
  • 列表内元素有顺序,可以使用索引index,索引从0开始
  • 线性的数据结构(点击查看详情)
  • 使用[]表示
  • 列表是可变的
  • 列表不能一开始就定义大小
  • 列表是结合顺序表和链表的一种动态类型

2.1 初始化

定义一个新的空的列表,有两种方法yidong

list1 = []		# 这种方法更常用
list2 = list() # 这个list()就是list类,在帮助文档中有说明

注意:在列表中不能一开始就定义列表大小,但是在其他语言中,往往建议初始化就要定义大小,这和语言的优化策略有关。

使用help()函数可以查看内置的帮助文档,这里摘取help(list)一部分,下面的魔术方法暂时忽略。

Help on class list in module builtins:

class list(object)
| list(iterable=(), /)
|
| Built-in mutable sequence. # 这说明了list是一种Python内置的可变的队列数据结构
|
| If no argument is given, the constructor creates a new empty list. # 如果没有接收到参数,构造器建立一个新的空列表
| The argument must be an iterable if specified.# 如果指定参数,它必须是一个可迭代的对象,比如range(1,5)
|
| Methods defined here:
|
| __add__(self, value, /)
| Return self+value.
|
| __contains__(self, key, /)
| Return key in self.

这里演示指定一个可迭代对象为参数

list1=list(range(1,5))
print(list1)
--------------------
[1, 2, 3, 4]

如果给一个已经存在的列表赋值新的元素,那么它之前的元素就回收了,回收机制也就是之前提过的GC机制

2.2 索引访问

  • 索引(index)也叫作下标,相当于一个目录
  • 正索引:从左至右,从0开始,为列表中每一个元素编号
  • 负索引:从右到左,从-1开始
  • 正负索引不可以超界,否则引发异常IndexError
  • 为了方便理解,可以认为列表是从左至右排列的,左边是头部,右边是尾部,左边是上界,右边是下界

列表通过索引访问,list[index]index就是索引,使用中括号访问

list1 = [5,1,'h',3.2,[1,2]]	#列表内的元素可以是任意对象
print("list1的第1号元素是"+list1[1]) # 利用索引查找元素
------------
list1的第1号元素是1

2.3 列表查询

  • index(value, start=0, stop=len(string))

    • 通过值value,从指定区间查找列表内的元素是否匹配
    • 匹配第一个就立即返回索引
    • 匹配不到就抛出异常ValueError
list1= ['a', 'b', 'c', 'c', 'd', 'e']
list1.index('c') # 查找list1中第一个'c'元素的索引值
>>> 2
list1.index('c',3) # 查找list1中从索引值3开始找到的第一个'c'元素的下标
>>> 3
list1.index('c',3, 4) # 查找list1中从索引值3开始到索引值4结束,找到的第一个'c'元素的下标
list1.index('c',4) # 查找list1中从索引值4开始找到的第一个'c'元素的下标
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-4a6e298ce585> in <module>
2 list1.index('c')
3 list1.index('c',3)
----> 4 list1.index('c',4) ValueError: 'c' is not in list
  • count(value):返回列表中匹配value的次数
list1= ['a', 'b', 'c', 'c', 'd', 'e']
list1.count('c')
>>> 2
  • len(list):返回列表list长度
list1= ['a', 'b', 'c', 'c', 'd', 'e']
len(list1)
>>> 6

2.4 列表元素修改

  • 索引访问修改

    • list(index) = value
    • 索引不能超界
list1= ['a', 'b', 'c', 'c', 'd', 'e']
list1[1]='f'
print(list1)
>>> ['a', 'f', 'c', 'c', 'd', 'e']

2.5 列表增加、插入元素

  • append(obj) -> None

    • 列表尾部追加元素,返回None
    • 返回None就意味着没有新的列表产生,就地修改
    • 时间复杂度是O(1)
list1= ['a', 'b', 'c', 'c', 'd', 'e']
list1.append('f')
print(list1)
>>> list1= ['a', 'b', 'c', 'c', 'd', 'e', 'f']
  • insert(index, object) -> None

    • 在指定的索引index处插入元素object
    • 返回None就意味着没有新的列表产生,就地修改
    • 时间复杂度为O(n)
    • 索引超越上界,在尾部追加,超越下界,在头部追加
list1= ['a', 'b', 'c', 'c', 'd', 'e']
list1.insert(1, 'f') # 在索引1处插入'f'元素,原来索引1处的元素的索引位置统统往后挪
print(list1)
>>> ['a', 'f', 'b', 'c', 'c', 'd', 'e']

append()和insert()都可以修改列表,但是append()比较常用,运行效率也比较快,而insert()则不太常用,一方面容易打乱原有的元素所在索引位置,另一方面运行效率不高,在列表中间插入一个元素会导致其后面的元素在内存中的位置都要挪动。

  • extend(iterable) -> None

    • 将可迭代对象的元素追加进来,返回None
    • 返回None就意味着没有新的列表产生,就地修改
list1=['a', 'b', 'c']
list2=['d', 'e']
list1.extend(list2)
print(list1)
>>> ['a', 'b', 'c', 'd', 'e']
  • + -> list

    • 连接操作,将两个列表连接起来
    • 产生新的列表,原列表不变
    • 本质上调用的是__add__()方法
list1=['a', 'b', 'c']
list2=['d', 'e']
list3 = list1 + list2
print(list3)
>>> ['a', 'b', 'c', 'd', 'e']
  • * -> list

    • 重复操作,将本列表元素重复n次,返回新的列表
list1=['a', 'b', 'c']
list2 = list1 * 3
print(list2)
>>> ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

2.6 列表删除元素

  • remove(value) -> None

    • 从左到右查找第一个匹配value的值,移除这个值
    • 就地修改
    • 效率和insert()类似
  • pop(index) -> item
    • 不指定索引index,就从列表尾部弹出一个元素
    • 指定索引index,就从索引处弹出一个元素
  • clear() -> None
    • 清除列表所有元素,剩下一个空列表
list1=['a', 'b', 'c', 'd', 'e']
list1.remove('a')
print(list1)
>>> ['b', 'c', 'd', 'e']
item = list1.pop()
print(list1)
>>> ['b', 'c', 'd']
print(item)
>>> e
list1.clear() # 清空list1

clear()操作会触发gc垃圾回收机制,如果在服务器繁忙运行的时候,突然大规模内存需要gc垃圾回收,这时运行效率就会被拉低。

2.7 列表其他操作

  • reverse() -> None

    • 将列表元素反转,返回None
    • 就地修改
list1=['a', 'b', 'e', 'd', 'c']
list1.reverse()
print(list1)
>>> ['c', 'd', 'e', 'b', 'a']
  • sort(key=None, reverse=False) -> None

    • 对列表元素进行排序,就地修改,默认升序
    • reverse为True,反转,降序
    • key一个函数,指定key如何排序,如list.sort(key=functionname)
list1=['a', 'b', 'e', 'd', 'c']
list1.sort()
print(list1)
>>> ['a', 'b', 'c', 'd', 'e']
------------------------------------
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1] # 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)] # 指定第二个元素排序
random.sort(key=takeSecond) # 输出类别
print ('排序列表:', random)
>>> 排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
  • in

    • [3,4] in [1, 2, [3, 4]],返回布尔值,可用作判断
    • for x in [1, 2, 3, 4]

在Python基础语法(一)有提及,可以回顾一下

以上为Python基础语法的第二部分,下一个部分将在下一篇博客中介绍。

Python基础语法(三)的更多相关文章

  1. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  2. python基础语法三

    集合: 1.不同元素组成 2.无序 3.集合中的元素必须是不可变类型  s = {1, 2, 3 } #定义集合 s = set('hello') print(s) s.pop() #指定删除 s.r ...

  3. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  4. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  5. python基础语法(四)

    --------------------------------------------接 Python 基础语法(三)---------------------------------------- ...

  6. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  7. Python 基础语法

    Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...

  8. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  9. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

随机推荐

  1. Angular changeDetction

    ChangeDection 检测程序内部状态,然后反映到UI上. 引起状态变化:Events,XHR,Timers ApplicationRef监听NgZone的onTurnDone,然后执行检测. ...

  2. 关于pom.xml文件中引入net.sf.json-lib出错问题

    关于pom.xml文件中引入net.sf.json-lib出错问题 在项目中引入以下依赖时一直报错 <dependency> <groupId>net.sf.json-lib& ...

  3. RabbitMQ 实现远程过程调用RPC

    RPC调用的顺序1. 在客户端初始化的时候,也就是SimpleRpcClient类初始化的时候,它会随机的创建一个callback队列,用于存放服务的返回值,这个队列是exclusive的.连接断开就 ...

  4. JMeter关联的几种方式总结案例

    1.接口响应结果,通常为HTML.JSON格式的数据,对于HTML的响应结果的提取,可以通过正则表达式,也可以通过XPath 来提取. 2.对于JSON格式的数据,可以通过正则表达式.JSON Ext ...

  5. Codeforces 1015F Bracket Substring AC自动机 + dp

    Bracket Substring 这么垃圾的题怎么以前都不会写啊, 现在一眼怎么就会啊.... 考虑dp[ i ][ j ][ k ][ op ] 表示 已经填了 i 个空格, 末尾串匹配到 所给串 ...

  6. js基础知识易错点(一)

    最近替另一个项目招人,要求基础知识好,随便问了一些基础题,发现了一些易错的点,总结一下. 1.判断一个空数组 var arr = []; 1)JSON.stringify(arr) == " ...

  7. 动态规划——Russian Doll Envelopes

    这个题大意很好理解,通过例子就能明白,很像俄罗斯套娃,大的娃娃套小的娃娃.这个题是大信封套小信封,每个信封都有长和宽,如果A信封的长和宽都要比B信封的要大,那么A信封可以套B信封,现在给定一组信封的大 ...

  8. [linux]CentOS安装pre-built Nginx

    官方文档:https://nginx.org/en/linux_packages.html Nginx安装分为软件包安装和pre-built安装.这里使用的pre-built安装,不用自己编译. 设置 ...

  9. jquery 操作服务端控件,select 控件

    <asp:DropDownList ID="ddl" runat="server"></asp:DropDownList> <se ...

  10. [JZOJ3588]【中山市选2014】J语言(表达式解析+栈)

    Description J语言作为一门编程语言,诞生于20世纪90年代.............. 好学的小H今天又学到了一种新东西——J语言.显然,J语言的背景已经被小H忘得一干二净了,但是小H仍然 ...