Python 数据类型及其用法
本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁。
基本结构
我们首先要看的是几乎任何语言都具有的数据类型,包括字符串、整型、浮点型以及布尔类型。这些基本数据类型组成了基本控制块,从而创建我们的Python应用程序。
字符串
字符串(String) 是一段文本字符,通常以某种形式向用户输出。如果我们打开Python的解释器,我们试着最常见的输出“Hello World!”应用:
>>> print ("Hello, world!")
Hello, world!
Python 中的数据类型不需要像Java或C语言那样显示的定义,这就意味着在Python中字符串就是简单地用引号括起来来标识,向上面的“Hello, world!”那样。我们也可以使用单引号而不是双引号,当我们字符串中就有双引号时,使用单引号来表示整个字符串更加方便,如:
>>> print ("This is David's program")
This is David's program
>>> print ('"Hello", said David')
"Hello", said David
从上面你就可以看出在不同的条件下如何交叉使用不同的引号。
字符串提供了许多内置的函数,这些在很多Python程序中很有用处,它们包括:
- endswith() - 检查字符串是否以给定字符串结尾
- startswith() - 检查字符串是否以给定字符串开始
- upper() - 将字符串所有字符变成大写
- lower() - 将字符串所有字符变成小写
- isupper()/islower() - 检测字符串是否全是大写/小写
- 我们也可以将字符串作为一个参数传入函数
len()
来返回字符串的长度,例如 len(“david”)
Python中字符串也是可迭代的,迭代的概念待会在列表和字典数据类型中可以做更深入的了解。这意味着我们可以依次循环字符串中每个字符,这在其它语言一般是不行的。
另一个关于字符串的技巧是,我们可以对字符串进行格式化。最好的方法是用 format
语句来完成,这个函数为你处理你传入对象的类型以字符串形式显示,所以你可以传入任何类型的对象到 format
方法用来输出。如下:
>>> string_1 = "Hello, {}, here is your string".format("David")
'Hello, David, here is your string'
>>>
>>> string_2 = "Hello, {}, your are {} years old".format("David", 23)
'Hello, David, you are 23 years old'
>>>
>>> string_3 = "Hello, {}, your are {} years old".format("David", 23.5)
'Hello, David, you are 23.5 years old'
从上面的代码可以清晰地看出,format
方法可以用来将任意的 Python 数据类型替换成字符串。
布尔类型以及if语句
布尔值 (True or False) 在任何语言中都是至关重要的,它们可以使我们根据变量的真假值来做出判断,通过代码可以用来控制程序的路径。在 Python 中,布尔值的首字母是大写的:True
和 False
。举例来说,使用上面提到的字符串的一些方法,我们可以测试一个字符串是否是大写,并输出正确的结果:
>>> if "david".isupper():
print ('"david" is uppercase')
else:
print ('"david" is lowercase')
"david" is lowercase
Python 中if
语句用来检查第一个条件是否为真,如果为True就会打印出 “david” is uppercase。然而在这个例子中,它返回False,所以 else 块执行,打印出 “david” is lowercase 。
在Python中,数据有其隐式的真假值的,这对于使代码简短、准确非常有帮助,就不需要每个地方都做判断了。下面就是Python中使用隐式布尔值的例子:
>>> bool('')
False
>>> bool('hello')
True
>>> a = None
>>> b = 1
>>> bool(a)
False
>>> bool(b)
True
>>> if a:
print ("Yes")
>>> if b:
print ("Yes")
Yes
在这个例子中,你可以看到我们可以检查变量的真假值。通过调用bool
方法,传入我们的变量给其做参数,返回True 或者 False。空值或者None(Python中类似其它语言Null 或者 Nil 的值)都会被认为是 False ,而其它情形则被认为是 True。
整型、浮点型、复数
数值(Numbers) 在Python中就像通常格式所代表的那样,整型如1,10,56,1045,100433 等等。
浮点型,通常我们需要小数时使用,例如1.23、0.34532、23.4667 等等。
Python 支持简单和高级的数学计算,有着广泛的用途,最常用的还是基本的算术运算:
>>> 1 + 1
2
>>> 1 - 1
0
>>> 2 * 2
4
>>> 2 / 2
1
查看 Python Docs,复数类型解释如下:
Complex numbers are also supported; imaginary numbers are written with a suffix of j or J. Complex numbers with a nonzero real component are written as (real+imagj), or can be created with the complex(real, imag) function.
>>> 1j * 1J
(-1+0j)
>>> 1j * complex(0,1)
(-1+0j)
>>> 3+1j*3
(3+3j)
>>> (3+1j)*3
(9+3j)
>>> (1+2j)/(1+1j)
(1.5+0.5j)
Complex numbers are always represented as two floating point numbers, the real and imaginary part. To extract these parts from a complex number z, use z.real and z.imag.
>>> a=1.5+0.5j
>>> a.real
1.5
>>> a.imag
0.5
更多高级结构
列表以及for循环
列表(list) 是Python以及其它语言中最常用到的数据结构之一。Python 使用中括号()用来解析列表,允许你以任意的顺序存储数据,从而方便处理。举例来说,如果我们需要从一个对象中抽取一些数据,我们可以将这些数据存在列表中以备后面使用:
>>> my_list = []
>>> for object in objects:
my_list.append(object.name)
>>> print (my_list)
['name_1', 'name_2', 'name_3']
上面的例子并不好,但你可以看到我们是如果从对象中提取数据,并将它们放到我们的列表中。类似的,如果我们有两个列表,使用extend
方法我们可以将它们合并成一个:
>>> list_1 = [1,2,3]
>>> list_2 = [4,5,6]
>>> print (list_1.append(list_2))
[1,2,3,[4,5,6]]
>>> print (list_1.extend(list_2))
[1,2,3,4,5,6]
这能清楚地看出这两个重要方法的不同。
在我们的第一个例子中,使用到了for循环来从我们的数据中构成列表,一种更简洁的解决方法可以使用列表扩展,这可以将整个过程压缩成一行。这是Python提供的一种高效的解决方法:
>>> my_list = [object.name for object in objects]
>>> print my_list
['name_1', 'name_2', 'name_3']
再来看看这是如何映射到第一中方法的:在列表中,我们遍历objects,使用object作为从objects取出每个元素的变量名,最后我们取出object的name构成我们的列表。
除了使用方括号用来构造列表对象之外,我们还可以使用列表构造函数list()
来建立我们的列表,如下:
>>> list('a')
['a']
>>> values = (1,2,3,4) # tuple object see below
>>> list(values)
[1,2,3,4]
字典
另一个普遍使用的Python数据结构是字典(Dictionaries)。字典用来存储大量数据,并且提供快速处理的方法。一种常见的字典应用的例子是通讯录系统。在字典这种数据结构中,你需要一个唯一的‘key’用来查询它对应的‘value’。在通讯录中,那个唯一的‘key’可以是电话号码,因此,字典结构是这样的:
>>> phonebook = {'012345678': 'A Person',
'987654321': 'A.N Other'}
这儿我们有一个字典,电话号码作为‘key’,对应人名作为‘value’。现在我们可以使用这个结构来查询,如下:
>>> phonebook['012345678']
'A Person'
Python的字典同样提供迭代每个数的标准方法,它们是:iteritems、iterkeys以及itervalues。这些函数分别允许我们迭代keys和values,仅迭代keys以及仅迭代values。下面是例子:
迭代所有的项:
>>> for key, value in phonebook.iteritems():
print (key, value)
987654321 A.N Other
012345678 A Person
仅迭代所有的keys:
>>> for key in phonebook.iterkeys():
print (key)
987654321
012345678
仅迭代所有的values:
>>> for value in phonebook.itervalues():
print (value)
A.N Other
A Person
与列表一样,也有不止一种创建字典的方法。到目前为止,我们只使用了逐个列举并用花括号括起来的方法来创建字典。然而,我们还可以像下面这样使用字典构造函数创建,需要传入关键字参数来创建我们字典的键值对:
>>> dict(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2}
Sets 和 Frozensets
类似与列表,我们还有集合(Sets) 以及 Frozensets 的数据结构。集合允许我们像列表那样存储数据,但不同的是集合里不允许有重复元素。当我们想确保每个数据只有一份拷贝的时候,这个是非常棒的。Frozensets 几乎和普通的集合是一样的,但它是不可变的类型(immutable),这意味着一旦它被创建,它就不能再以任何方式改变。
同样,我们创建集合的方法有列举法(注意:相同的元素会自动删除):
>>> a = {1,2,3,3}
set([1, 2, 3])
也可以使用构造函数:
>>> set([1,2,3,3])
set([1, 2, 3])
Python 提供了强大的集合操作方法,我们可以完成数学中集合的并集、交集、差集等操作,如下:
>>> a = {1,2,3}
>>> b = {3,4,5}
>>> a.union(b)
set([1, 2, 3, 4, 5])
>>>
>>> a.difference(b)
set([1, 2])
>>>
>>> a.intersection(b)
set([3])
元组
最后介绍的 Python 数据类型是元组(tuples)。元组类似与列表,用逗号(,)来分隔存储的数据,与列表不同的是元组是不可变类型(immutable),列表可以任你插入或改变,而元组不行。所以,元组适用于你的数据是固定且不需改变的情形。从内存的角度来看,使用元组有一大好处是,Python可以明确地知道需要分配多少内存给元组(同样 Frozensets 也有这个好处)。
Python 同样也提供列举法和构造法来创建一个元组:
>>> my_tuple = (1,2,3,4)
(1,2,3,4)
>>>
>>> a = tuple([1,2,3,4])
>>> type(a)
<class 'tuple'>
关于元组这儿有几点特殊的情形需要说明。你可以使用空小括号或者使用不传参的构造函数来创建一个空的元组,但创建仅有一个元素的元组时还需要一个额外的逗号,乍一看好像是错误的,但这才是正确的语法。这是因为如果没有这个逗号,Python 会忽略小括号,仅仅只看到里面的值。下面的例子说明了这点:
>>> empty_tup = ()
>>> type(empty_tup)
<class 'tuple'>
>>>
>>> empty_tuple = tuple()
<class 'tuple'>
>>>
>>> single_tup = (1)
>>> type(single_tup)
<class 'int'>
>>>
>>> single_tup = (1,)
>>> type(single_tup)
<class 'tuple'>
可以看到一个小逗号作用这么大!
总结
本文主要总结了Python中我们使用的一些数据结构的不同,也罗列了一些有趣的高级的用法。
参考资料:
http://tech.pro/tutorial/1151/python-data-types-and-their-usage 主要译自該篇文章
http://docs.python.org/3.3/ Python 官方文档,最权威最全面的Python学习资料
Python 数据类型及其用法的更多相关文章
- day01-day04总结- Python 数据类型及其用法
Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点 ...
- Python数据类型的用法
字符串的用法 res = 'hellow,world' print(res) #res.显示的都是它的方法,下划线的除外 1 判断字符串的结尾字符,返回的值的布尔形式 endswith 判断字符串的开 ...
- 浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- Python学习笔记(五)--Python数据类型-数字及字符串
Python数据类型:123和'123'一样吗?>>> 123=='123'False>>> type(123)<type 'int'>>> ...
- python数据类型分类以及运算类型
一.python数据类型 目录: 1.数字(整数.小数) 2.字符串(单引号.双引号.三引号) 3.元组 #元素确定之后不能修改 4.列表 #元素可以修改 5.集合 #不讲顺序,得到的结果没有重复元 ...
- python 数据类型详解
python数据类型详解 参考网址:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8 ...
- 【转】Python数据类型之“集合(Sets)与映射(Mapping)”
[转]Python数据类型之“集合(Sets)与映射(Mapping)” 一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的 ...
- python map 常见用法
python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...
- python之函数用法isinstance()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法isinstance() #isinstance() #说明:返回一个布尔值,判断数据 ...
随机推荐
- 学C++的经验总结
下面的是学C++时要注意的. 1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<T ...
- Java 批量插入数据(Oracle)
//批量添加20000条数据用时8秒. try { String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...
- PostgreSQL保存文件到数据库
1.CREATE TABLE public.t_file ( id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('t_file_id_seq'::regc ...
- CSS:CSS使用Tips
Css是前端开发中效果展现的主要部分之一,良好的Css书写习惯可以为实际的项目开发提高效率,也可以为实现良好的团队合作提供保证. 一般新手在使用Css的时候经常会犯一些错误,出现一些不经意的漏洞,如果 ...
- 我与ADO.NET二三事(2)
继上篇开始,这里主要再次精简.因为大家已经熟悉了主要思想以及它的工作方式.那么这里提供的案例改动会很大.上篇的DatabaseCommand***均是为了大家能够轻松的理解所临时编写的.这次提供的接口 ...
- angularjs—指令input
input[text] input一般和ngModel结合使用来实现双向绑定,同时angular提供了很多表单校验的指令 required 必填 ngRequired 必填(ngRequired可以控 ...
- js 自动插入分号
先来看一个例子: function get(){ return { a:1 } } var r=get(); console.log(r); 似乎r的值应该是{a:1},然而运行结果却是undefin ...
- String类型的属性和方法
× 目录 [1]属性 [2]对象通用方法 [3]访问字符方法[4]字符串拼接[5]创建子串方法[6]大小写转换[7]查找子串位置[8]正则匹配方法[9]去除首尾空格[10]字符串比较 前面的话 前面已 ...
- MAC下的XMPP环境搭建
实现即时通信有多种方式,下面讲的是Mac下使用XMPP来实现. XML Messages Presence Protocol 可扩展消息处理协议 简单讲就是基于XML语言的点对点即时通信协议 原理: ...
- CoreGraphics-线段常见属性及渲染模式介绍
线段常见属性: 1.线宽 2.线头样式 3.接头样式 4.颜色(包括描边颜色和填充颜色) override func draw(_ rect: CGRect) { // 获取图形上下文对象 let c ...