python的数据类型

1.数据

python支持面向对象编程范式,这意味着python认为数据是问题解决过程中的关键点。在python以及其他所有面向对象编程语言中,类都是对数据的构成以及数据能做什么的描述。在面向对象编程中,数据项被称作对象。一个对象就是类的一个实例。

1.1内建原子数据类型

python通过bool类实现对表达真值非常有用的布尔数据类型。布尔对象可能的状态值是True或者False,布尔运算符有and、or以及not

>>> True
True
>>> False
False
>>> False or True
True
>>> not(False or True)
False
>>> True and True
True

布尔对象也被用作相等(==)、大于(>)等比较运算符的计算结果。此外,结合使用关系运算符与逻辑运算符可以表达复杂的逻辑问题。
下表展示了关系运算符和逻辑运算符
python的数据类型_第1张图片

>>> 5 == 10
False
>>> 10>5
True
>>> (5 >= 1)and(5 <=10)
True

当一个名字第一次出现在赋值语句的左边部分时,会创建对应的python变量。赋值语句将名字与值关联起来。变量存的是指向数据的引用,而不是数据本身。

>>> theSum = 0
>>> theSum
0
>>> theSum = theSum+1
>>> theSum
1
>>> theSum = True
>>> theSum
True

赋值语句改变了变量的引用。这体现了python的动态特性。同样的变量可以指向许多不同类型的数据。

1.2内建集合数据类型

除了数值类和布尔类,python还有众多强大的内建集合类。列表、字符串以及元组是概念上非常相似的有序集合。集(set)和字典是无序集合。

1.2.1列表

列表是异构的,意味着指向的数据对象不需要都是同一类。例如:

>>> [1,3,True,6.5]
[1, 3, True, 6.5]
>>> myList = [1,3,True,6.5]
>>> myList
[1, 3, True, 6.5]

可应用于任意python序列的运算,如下表:
python的数据类型_第2张图片
需要注意的是,列表和序列的下标从0开始。myList[1:3]会返回一个包含下标从1到2的元素列表。
如果需要快速初始化列表,可以通过重复运算来实现,如下:

>>> myList = [0]*6
>>> myList
[0, 0, 0, 0, 0, 0]

值得注意的是,重复运算返回的结果是序列中指向数据对象的引用的重复。下面的例子可以很好地说明这一点。

>>> myList = [1,2,3,4]
>>> A = [myList]*3
>>> A
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
>>> myList[2]=45
>>> A
[[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]]

列表支持的一些用于构建数据结构的方法:
python的数据类型_第3张图片

>>> myList = [1024,3,True,6.5]
>>> myList
[1024, 3, True, 6.5]
>>> myList.append(False)
>>> myList
[1024, 3, True, 6.5, False]
>>> myList.insert(2,4.5)
>>> myList
[1024, 3, 4.5, True, 6.5, False]
>>> myList.pop()
False
>>> myList.pop(1)
3
>>> myList.pop(2)
True
>>> myList
[1024, 4.5, 6.5]
>>> myList.sort()
>>> myList
[4.5, 6.5, 1024]
>>> myList.reverse()
>>> myList
[1024, 6.5, 4.5]
>>> myList.count(6.5)
1
>>> myList.index(4.5)
2
>>> myList.remove(6.5)
>>> myList
[1024, 4.5]
>>> del myList[0]
>>> myList
[4.5]

像pop这样的方法在返回值的同时也会修改列表的内容,reverse等方法则仅修改列表而不返回任何值。还有熟悉的句点法,它被用来调用某个对象的方法。myList.append(False)可以读作“请求myList调用其append方法并将False这一值传给它”。

range是一个常见的Python函数,我们常把它与列表放在一起讨论。range会生成一个代表值序列的范围对象。使用list函数,能够以列表形式看到范围对象的值。下面代码展示了这一点:

>>> range(0,10)
range(0, 10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(5,10))
[5, 6, 7, 8, 9]
>>> list(range(5,10,2))
[5, 7, 9]
>>> list(range(10,1,-1))
[10, 9, 8, 7, 6, 5, 4, 3, 2]
1.2.2字符串

字符串是零个或多个字母、数字和其他符号的有序集合。
python字符串提供的方法如下:

>>> myName = 'David'
>>> myName
'David'
>>> myName.upper()
'DAVID'
>>> myName.center(10)
'  David   '

列表和字符串的主要区别在于,列表能够被修改,字符串则不能。

>>> myList = [1,3,True,6.5]
>>> myList[0]=2**10
>>> myList
[1024, 3, True, 6.5]
>>> myName = 'David'
>>> myName
'David'
>>> myName[0]='X'  
Traceback (most recent call last):
  File "", line 1, in 
    myName[0]='X'
TypeError: 'str' object does not support item assignment
1.2.3字符串

由于都是异构数据序列,因此元组与列表非常相似,它们的区别在于,元组和字符串一样是不可修改的。元组通常写成由括号包含并且以逗号分隔的一系列值。

>>> myTuple = (2,True,4.96)
>>> myTuple
(2, True, 4.96)
>>> len(myTuple)
3
>>> myTuple*3
(2, True, 4.96, 2, True, 4.96, 2, True, 4.96)

如果尝试改变元组中的一个元素,就会遇到错误。

1.2.4集

集是由零个或多个不可修改的python数据对象组成的无序集合,集不允许重复元素,由花括号包含,以逗号分隔。

>>> mySet = {3,6,"cat",4.5,False}
>>> mySet
{False, 3, 4.5, 'cat', 6}

python集支持的运算:
python的数据类型_第4张图片
python集支持的方法python的数据类型_第5张图片

>>> mySet = {False,4.5,3,6,'cat'}
>>> yourSet = {99,3,100}
>>> mySet.union(yourSet)
{False, 3, 4.5, 99, 'cat', 6, 100}
>>> mySet | yourSet
{False, 3, 4.5, 99, 'cat', 6, 100}
>>> mySet.intersection(yourSet)
{3}
1.2.4字典

字典是无序结构,由相关的元素对构成,其中没对元素都由一个键和一个值组成。这种键-值对通常写成键:值的形式。
可以通过键访问其对应的值,也可以向字典添加新的键-值对。访问字典的语法与访问序列的语法十分相似。

capitals = {'Iowa':'DesMoines','Wisconsion':'Madison'}
>>> capitals
{'Iowa': 'DesMoines', 'Wisconsion': 'Madison'}
>>> capitals['Utah'] = 'SaltLakeCity'
>>> capitals
{'Iowa': 'DesMoines', 'Wisconsion': 'Madison', 'Utah': 'SaltLakeCity'}
>>> capitals['California'] = 'Sacramento'
>>> capitals
{'Iowa': 'DesMoines', 'Wisconsion': 'Madison', 'Utah': 'SaltLakeCity', 'California': 'Sacramento'}

有趣的是,第一个添加的键-值对放在了字典的第一位,第二个添加的键-值对被放在了最后,这是因为键的位置是由散列来决定的,而不是依次插入的。后面再说散列。

字典的运算符
在这里插入图片描述
字典提供的方法
python的数据类型_第6张图片

2.输入与输出

input函数接受一个字符串作为参数。由于该字符串包含有用的文本来提示用户输入,因此它经常被称为提示字符串。举例来说:

Name = input('Please enter your name:')

不论你输入什么内容,都会被存储再Name变量中。使用input函数,可以非常简便地写出程序,让用户输入数据,然后再对这些数据进行进一步处理。

Name = input("please enter your name ")
print("Your name in all capitals is ",Name.upper())

需要注意的是,input函数返回的值是一个字符串,它包含用户再提示字符串后面输入的所有字符。如果需要将这个字符串转换成其他类型,必须明确地提供类型转换。

sradius = input("Please enter the radius of the circles ")
radius = float(sradius)
diameter = 2*radius

格式化字符
print函数为输出Python程序的值提供了一种非常简便的方法,它接受零个或多个参数,并且将单个空格作为默认分隔符来显示结果。

>>> print("Hello","world")
Hello world
>>> print("Hello","world",sep="***")
Hello***world

python提供了另一种叫作格式化字符串的方式。%是字符串运算符,被称作格式化运算符。
下表是格式化字符串可用的类型声明:
python的数据类型_第7张图片
格式化运算符的右边是将被插入格式化字符串的一些值。这个集合可以是元组或者字典。如果这个集合是字典,那么值就根据它们对应的键被插入,并且所有的格式化字符必须使用(name)修改符来指定键名。

>>> price = 24
>>> item = "banana"
>>> print(The %s coast %d cents" %(item,price))
>>> print("The %s costs %d cents" % (item,price))
The banana costs 24 cents
>>> itemdict = {"item":"banana","cost":24}
>>> print("The %(item)s costs %(cost)7.1f cents" % itemdict )
The banana costs    24.0 cents

3.控制结构

正如前文所述,算法需要两个重要的控制结构:迭代和分支。Python通过多种方式支持这两种控制结构。

3.1迭代

对于迭代,Python提供了标准的while语句以及非常强大的for语句。while语句会在给定条件为真时重复执行一段代码。

>>> counter = 1
>>> while counter <= 5
>>> while counter <= 5:
	print("Hello,world")
	counter = counter +1

Hello,world
Hello,world
Hello,world
Hello,world
Hello,world

这段代码将“Hello,world”打印了5次。Python会在每次重复执行前计算while语句中的条件表达式。由于python本身要求强制缩进,因此可以非常容易地看清楚while语句的结构。
while语句是非常普遍的迭代结构,我们在很多不同的算法中都会用到它。在很多情况下,迭代过程由复合条件来控制。

while counter <= 10 and not done:

在这个例子中,迭代语句只有在上面两个条件都满足的条件下才会被执行。变量counter的值需要小于或等于10,并且变量done的值需要为False。
while语句在众多情况下都非常有用,另一个迭代结构for语句则可以很好地和python的各种集合结合在一起使用。for语句可以用于遍历一个序列集合的每个成员。

>>> for item in [1,3,6,2,5]:
	print(item)

	
1
3
6
2
5

你可能感兴趣的:(python,python)