首页 后端开发 Python教程 简单介绍Python中的几种数据类型

简单介绍Python中的几种数据类型

Jun 10, 2016 pm 03:06 PM
python 数据类型

大体上把Python中的数据类型分为如下几类:

Number(数字)         包括int,long,float,complex  
String(字符串)        例如:hello,"hello",hello  
List(列表)          例如:[1,2,3],[1,2,3,[1,2,3],4]  
Dictionary(字典)       例如:{1:"nihao",2:"hello"}  
Tuple(元组)          例如:(1,2,3,abc) 
Bool(布尔)          包括True、False  


登录后复制

由于Python中认为所有的东西都是对象,所以Python不用像其它一些高级语言那样主动声明一个变量的类型。

例如我要给一个变量i赋值100,python的实现 :

i=100 
登录后复制

C#的实现:

int i = 100; 

登录后复制

下面一一简单介绍这几种数据类型

数字类型

int和long

之所以要把int和long放在一起的原因是python3.x之后已经不区分int和long,统一用int。python2.x还是区分的。下面我以Python2.7为例:

>>> i = 10 
>>> type(i) 
<type 'int'> 
 
>>> i=10000000000 
>>> type(i) 
<type 'long'> 
登录后复制

那么为什么10就是int,10000000000就是long呢,当然这就和int的最大值有关了,int类型的最大值为231-1,即2147483647,也可以用sys.maxint。

>>> 2**31-1 
2147483647L 
>>> sys.maxint 
2147483647 
登录后复制

为什么用上面的方法求的值就是long型的呢(数字后面加‘L'表示是long型),因为2**31的值为2147483648,这个值是一个long型,用一个long型减去1,结果还是一个long,但实际上int型的最大值就是2147483647

>>> type(2147483647) 
<type 'int'> 
>>> type(2147483648) 
<type 'long'> 

登录后复制

float类型

float类型和其它语言的float基本一致,浮点数,说白了,就是带小数点的数,精度与机器相关。例如:

>>> i = 10000.1212 
>>> type(i) 
<type 'float'> 

登录后复制

complex:复数类型,具体含义及用法可自行查看相关文档。

字符串类型

字符串的声明有三种方式:单引号、双引号和三引号(包括三个单引号或三个双引号)。例如:

>>> str1 = 'hello world' 
>>> str2 = "hello world" 
>>> str3 = '''hello world''' 
>>> str4 = """hello world""" 
>>> print str1 
hello world 
>>> print str2 
hello world 
>>> print str3 
hello world 
>>> print str4 
hello world 
登录后复制

Python中的字符串有两种数据类型:str类型和unicode类型。str类型采用的ASCII编码,也就是说它无法表示中文。unicode类型采用unicode编码,能够表示任意字符,包括中文及其它语言。并且python中不存在像c语言中的char类型,就算是单个字符也是字符串类型。字符串默认采用的ASCII编码,如果要显示声明为unicode类型的话,需要在字符串前面加上'u'或者'U'。例如:

>>> str1 = "hello" 
>>> print str1 
hello 
>>> str2 = u"中国" 
>>> print str2 
中国 
登录后复制

由于项目中经常出现对字符串的操作,而且由于字符串编码问题出现的问题很多,下面,来说一下关于字符串的编码问题。在与python打交道的过程中经常会碰到ASCII、Unicode和UTF-8三种编码。具体的介绍请参见这篇文章。我简单的理解就是,ASCII编码适用英文字符,Unicode适用于非英文字符(例如中文、韩文等),而utf-8则是一种储存和传送的格式,是对Uncode字符的再编码(以8位为单位编码)。例如:

u = u'汉' 
print repr(u) # u'\u6c49' 
s = u.encode('UTF-8') 
print repr(s) # '\xe6\xb1\x89' 
u2 = s.decode('UTF-8') 
print repr(u2) # u'\u6c49' 
登录后复制

解释:声明unicode字符串”汉“,它的unicode编码为”\u6c49“,经过utf-8编码转换后,它的编码变成”\xe6\xb1\x89“。

对于编码的经验总结:

1.在python文件头声明编码格式 ;

#-*- coding: utf-8 -*-
2.将字符串统一声明为unicode类型,即在字符串前加u或者U;

3.对于文件读写的操作,建议适用codecs.open()代替内置的open(),遵循一个原则,用哪种格式写,就用哪种格式读;

假设在一个以ANSI格式保存的文本文件中有“中国汉字”几个字,如果直接用以下代码,并且要在GUI上或者在一个IDE中打印出来(例如在sublime text中,或者在pydev中打印),就会出现乱码或者异常,因为codecs会依据文本本身的编码格式读取内容:

f = codecs.open("d:/test.txt") 
content = f.read() 
f.close() 
print content 
登录后复制

改用如下方法即可(只对中文起作用):

# -*- coding: utf-8 -*- 
 
import codecs 
 
f = codecs.open("d:/test.txt") 
content = f.read() 
f.close() 
 
if isinstance(content,unicode): 
  print content.encode('utf-8') 
  print "utf-8" 
else: 
  print content.decode('gbk').encode('utf-8') 
 
登录后复制

列表类型

列表是一种可修改的集合类型,其元素可以是数字、string等基本类型,也可以是列表、元组、字典等集合对象,甚至可以是自定义的类型。其定义方式如下:

>>> nums = [1,2,3,4] 
>>> type(nums) 
<type 'list'> 
>>> print nums 
[1, 2, 3, 4] 
>>> strs = ["hello","world"] 
>>> print strs 
['hello', 'world'] 
>>> lst = [1,"hello",False,nums,strs] 
>>> type(lst) 
<type 'list'> 
>>> print lst 
[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']] 

登录后复制

用索引的方式访问列表元素,索引从0开始,支持负数索引,-1为最后一个.

>>> lst = [1,2,3,4,5] 
>>> print lst[0] 
1 
>>> print lst[-1] 
5 
>>> print lst[-2] 
4 
登录后复制

支持分片操作,可访问一个区间内的元素,支持不同的步长,可利用分片进行数据插入与复制操作

nums = [1,2,3,4,5] 
print nums[0:3] #[1, 2, 3] #前三个元素 
 
print nums[3:]  #[4, 5]  #后两个元素 
 
print nums[-3:] #[3, 4, 5] #后三个元素 不支持nums[-3:0] 
 
numsclone = nums[:]  
 
print numsclone  #[1, 2, 3, 4, 5] 复制操作 
 
print nums[0:4:2]  #[1, 3]  步长为2 
 
nums[3:3] = ["three","four"]  #[1, 2, 3, 'three', 'four', 4, 5] 在3和4之间插入 
 
nums[3:5] = []  #[1, 2, 3, 4, 5] 将第4和第5个元素替换为[] 即删除["three","four"] 
登录后复制

支持加法和乘法操作

lst1 = ["hello","world"] 
lst2 = ['good','time'] 
print lst1+lst2 #['hello', 'world', 'good', 'time'] 
 
print lst1*5 #['hello', 'world', 'hello', 'world', 'hello', 'world', 'hello', 'world', 'hello', 'world'] 
登录后复制

列表所支持的方法,可以用如下方式查看列表支持的公共方法:

>>> [x for x in dir([]) if not x.startswith("__")] 
['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 
def compare(x,y): 
  return 1 if x>y else -1 

#【append】 在列表末尾插入元素 
lst = [1,2,3,4,5] 
lst.append(6)  
print lst   #[1, 2, 3, 4, 5, 6] 
lst.append("hello") 
print lst   #[1, 2, 3, 4, 5, 6] 
 
#【pop】 删除一个元素,并返回此元素的值 支持索引 默认为最后一个 
x = lst.pop() 
print x,lst   #hello [1, 2, 3, 4, 5, 6] #默认删除最后一个元素 
x = lst.pop(0) 
print x,lst   #1 [2, 3, 4, 5, 6] 删除第一个元素 
 
#【count】 返回一个元素出现的次数 
print lst.count(2)  #1   
 
#【extend】 扩展列表 此方法与“+”操作的不同在于此方法改变原有列表,而“+”操作会产生一个新列表 
lstextend = ["hello","world"] 
lst.extend(lstextend) 
print lst      #[2, 3, 4, 5, 6, 'hello', 'world'] 在lst的基础上扩展了lstextend进来  
 
#【index】 返回某个值第一次出现的索引位置,如果未找到会抛出异常 
print lst.index("hello") #5   
 
#print lst.index("kitty") #ValueError: 'kitty' is not in list 出现异常 

#【remove】 移除列表中的某个元素,如果待移除的项不存在,会抛出异常 无返回值 
lst.remove("hello") 
print lst   #[2, 3, 4, 5, 6, 'world'] "hello" 被移除 
 
#lst.remove("kitty")     #ValueError: list.remove(x): x not in list 
 
#【reverse】 意为反转 没错 就是将列表元素倒序排列,无返回值 
print lst    #[2, 3, 4, 5, 6, 'world'] 
lst.reverse()  
print lst    #[2, 3, 4, 5, 6, 'world'] 

#【sort】 排序 
print lst  #由于上面的反转 目前排序为 ['world', 6, 5, 4, 3, 2] 
lst.sort()  
print lst  #排序后 [2, 3, 4, 5, 6, 'world'] 
 
nums = [10,5,4,2,3] 
print nums   #[10,5,4,2,3] 
nums.sort(compare) 
print nums   #[2, 3, 4, 5, 10] 

登录后复制

列表转换为迭代器。

所谓的迭代器就是具有next方法(这个方法在调用时不需要任何参数)的对象。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。迭代器相对于列表的优势在于,使用迭代器不必一次性将列表加入内存,而可以依次访问列表的数据。

依然用上面的方法查看迭代器的公共方法:

lst = [1,2,3,4,5] 
lstiter = iter(lst) 
print [x for x in dir(numiter) if not x.startswith("__")] 
>>>['next'] 
登录后复制

没错,只有next一个方法,对于一个迭代器,可以这样操作:

lst = [1,2,3,4,5] 
lstiter = iter(lst) 
 
for i in range(len(lst)): 
  print lstiter.next() #依次打印 
  1 
  2 
  3 
  4 
  5 
登录后复制

元组类型

元组类型和列表一样,也是一种序列,与列表不同的是,元组是不可修改的。元组的声明如下:

lst = (0,1,2,2,2) 
lst1=("hello",) 
lst2 = ("hello") 
print type(lst1)  #<type 'tuple'> 只有一个元素的情况下后面要加逗号 否则就是str类型 
print type(lst2)  #<type 'str'> 
登录后复制

字典类型

字典类型是一种键值对的集合,类似于C#中的Dictionary或js中的json对象。其初始化方法如下:

dict1 = {} 
print type(dict1)   #<type 'dict'> 声明一个空字典 
 
dict2 = {"name":"kitty","age":18}  #直接声明字典类型 
 
dict3 = dict([("name","kitty"),("age",18)]) #利用dict函数将列表转换成字典 
 
dict4 = dict(name='kitty',age=18)      #利用dict函数通过关键字参数转换为字典 
 
dict5 = {}.fromkeys(["name","age"])   #利用fromkeys函数将key值列表生成字典,对应的值为None  {'age': None, 'name': None} 
登录后复制

字典基本的操作方法:

#【添加元素】  
dict1 = {} 
dict1["mykey"] = "hello world"   #直接给一个不存在的键值对赋值 即时添加新元素 
 
dict1[('my','key')] = "this key is a tuple"  #字典的键可以是任何一中不可变类型,例如数字、字符串、元组等 
 
#【键值对个数】 
print len(dict1) 
 
#【检查是否含有键】 
print "mykey" in dict1     #True 检查是否含有键为mykey的键值对 
print "hello" in dict1     #False 
 
#【删除】 
del dict1["mykey"]      #删除键为mykey的键值对 

登录后复制

继续利用上面的方法查看字典的所有公共方法:

>>> [x for x in dir({}) if not x.startswith("__")] 
['clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 
 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues'] 
登录后复制


dict.clear() 删除字典中所有元素

dict.copy() 返回字典(浅复制)的一个副本

dict.get(key,default=None) 对字典dict 中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数default 的默认值为None)

dict.has_key(key) 如果键(key)在字典中存在,返回True,否则返回False. 在Python2.2版本引入in 和not in 后,此方法几乎已废弃不用了,但仍提供一个 可工作的接口。

dict.items() 返回一个包含字典中(键, 值)对元组的列表

dict.keys() 返回一个包含字典中键的列表

dict.values() 返回一个包含字典中所有值的列表

dict.iter() 方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代器,而不是一个列表。

dict.pop(key[, default]) 和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。

dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。

dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。
布尔类型

布尔类型即True和False,和其它语言中的布尔类型基本一致。下面列出典型的布尔值

print bool(0)  #False 
print bool(1)  #True 
print bool(-1) #True 
 
print bool([]) #False 
print bool(()) #False 
print bool({}) #False 
print bool('') #False 
print bool(None) #False 
登录后复制

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql 是否要付费 mysql 是否要付费 Apr 08, 2025 pm 05:36 PM

MySQL 有免费的社区版和收费的企业版。社区版可免费使用和修改,但支持有限,适合稳定性要求不高、技术能力强的应用。企业版提供全面商业支持,适合需要稳定可靠、高性能数据库且愿意为支持买单的应用。选择版本时考虑的因素包括应用关键性、预算和技术技能。没有完美的选项,只有最合适的方案,需根据具体情况谨慎选择。

mysql安装后怎么使用 mysql安装后怎么使用 Apr 08, 2025 am 11:48 AM

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

mysql下载文件损坏无法安装的修复方案 mysql下载文件损坏无法安装的修复方案 Apr 08, 2025 am 11:21 AM

MySQL下载文件损坏,咋整?哎,下载个MySQL都能遇到文件损坏,这年头真是不容易啊!这篇文章就来聊聊怎么解决这个问题,让大家少走弯路。读完之后,你不仅能修复损坏的MySQL安装包,还能对下载和安装过程有更深入的理解,避免以后再踩坑。先说说为啥下载文件会损坏这原因可多了去了,网络问题是罪魁祸首,下载过程中断、网络不稳定都可能导致文件损坏。还有就是下载源本身的问题,服务器文件本身就坏了,你下载下来当然也是坏的。另外,一些杀毒软件过度“热情”的扫描也可能造成文件损坏。诊断问题:确定文件是否真的损坏

mySQL下载完安装不了 mySQL下载完安装不了 Apr 08, 2025 am 11:24 AM

MySQL安装失败的原因主要有:1.权限问题,需以管理员身份运行或使用sudo命令;2.依赖项缺失,需安装相关开发包;3.端口冲突,需关闭占用3306端口的程序或修改配置文件;4.安装包损坏,需重新下载并验证完整性;5.环境变量配置错误,需根据操作系统正确配置环境变量。解决这些问题,仔细检查每个步骤,就能顺利安装MySQL。

MySQL安装后服务无法启动的解决办法 MySQL安装后服务无法启动的解决办法 Apr 08, 2025 am 11:18 AM

MySQL拒启动?别慌,咱来排查!很多朋友安装完MySQL后,发现服务死活启动不了,心里那个急啊!别急,这篇文章带你从容应对,揪出幕后黑手!读完后,你不仅能解决这个问题,还能提升对MySQL服务的理解,以及排查问题的思路,成为一名更强大的数据库管理员!MySQL服务启动失败,原因五花八门,从简单的配置错误到复杂的系统问题都有可能。咱们先从最常见的几个方面入手。基础知识:服务启动流程简述MySQL服务启动,简单来说,就是操作系统加载MySQL相关的文件,然后启动MySQL守护进程。这其中涉及到配置

如何针对高负载应用程序优化 MySQL 性能? 如何针对高负载应用程序优化 MySQL 性能? Apr 08, 2025 pm 06:03 PM

MySQL数据库性能优化指南在资源密集型应用中,MySQL数据库扮演着至关重要的角色,负责管理海量事务。然而,随着应用规模的扩大,数据库性能瓶颈往往成为制约因素。本文将探讨一系列行之有效的MySQL性能优化策略,确保您的应用在高负载下依然保持高效响应。我们将结合实际案例,深入讲解索引、查询优化、数据库设计以及缓存等关键技术。1.数据库架构设计优化合理的数据库架构是MySQL性能优化的基石。以下是一些核心原则:选择合适的数据类型选择最小的、符合需求的数据类型,既能节省存储空间,又能提升数据处理速度

mysql安装后怎么优化数据库性能 mysql安装后怎么优化数据库性能 Apr 08, 2025 am 11:36 AM

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

mysql 需要互联网吗 mysql 需要互联网吗 Apr 08, 2025 pm 02:18 PM

MySQL 可在无需网络连接的情况下运行,进行基本的数据存储和管理。但是,对于与其他系统交互、远程访问或使用高级功能(如复制和集群)的情况,则需要网络连接。此外,安全措施(如防火墙)、性能优化(选择合适的网络连接)和数据备份对于连接到互联网的 MySQL 数据库至关重要。

See all articles