Python学习手册--第二部分(数据类型)

简介: Python学习手册--第二部分(数据类型)

简单地对Python有了一定的了解之后,我们开始正式学习Python。
Python的核心数据类型见下表。

类型 例子
数字 1234
字符串 'span',"guido"
列表 [1,[2,'three'],4]
字典 {'food':'span','taste':'yum'}
元组 (1,'span',4,'U')
文件 myfile = open('eggs','r')
其它类型 集合、None、布尔型

对于有其它语言基础的同学来说,上述内容简直小菜一碟,没有语言基础的同学也能很快理解。

变量的命名和使用

在Python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解。请务必牢记下述有关变量的规则。
变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。
变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greetingmessage会引发错误。
不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print (请参见附录A.4)。
变量名应既简短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。
要创建良好的变量名,需要经过一定的实践,在程序复杂而有趣时尤其如此。随着你编写的程序越来越多,并开始阅读别人编写的代码,将越来越善于创建有意义的变量名。
注意 就目前而言,应使用小写的Python变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意。

下面我们一一介绍每种数据类型。

字符串

字符串 就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如:

"This is a string."
'This is also a string.'

对于字符串,可执行的最简单的操作之一是修改其中的单词的大小写。我们编写如下代码:

name = 'hello world'
print(name.title())

然后运行程序。
在这里插入图片描述
在这段代码中,我们通过name.title()调用了字符串自身的一个函数title(),这个函数的作用就是将每个单词的首字母大写。在字符串中,还有很多Python定义好的函数提供给我们使用,例如:要将字符串改为全部大写或全部小写,我们可以这样:

name = 'hello world'
print(name.title())

# 全部大写输出
print(name.upper())
# 全部小写输出
print(name.lower())

运行程序,输出如下。
在这里插入图片描述
存储数据时,方法lower() 很有用。很多时候,你无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为
最合适的大小写方式。

在程序中,额外的空白可能令人迷惑。对程序员来说,'python' 和'python ' 看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发
现'python ' 中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。
空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。但在一些简单得多的情形下,额外的空格也可能令人迷
惑。所幸在Python中,删除用户输入的数据中的多余的空白易如反掌。
Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip() 。

language = 'python  '
print(language)
# 删除空白
print(language.rstrip())
print(language)

我们运行程序。
在这里插入图片描述
可能你们会发现,这三个输出不是一样的吗?其实这三个输出是不一样的,只是我们看不出空白而已。需要注意的是,对变量language调用方法rstrip() 后,这个多余的空格被删除了。然而,这种删除只是暂时的,接下来再次询问language的值时,你会发现这个字符串与输入时一样,依然包含多余的空白。要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:

language = language.rstrip()
print(language)

你还可以剔除字符串开头的空白,或同时剔除字符串两端的空白。为此,可分别使用方法lstrip() 和strip() :

fruit = ' apple'
print(fruit.lstrip())
fruit = ' banana '
print(fruit.strip())

数字

在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等。Python根据数字的用法以不同的方式处理它们。鉴于整数使用起来最简单,下面就先来看看Python是如何管理它们的。
在Python中,可对整数执行加(+ )减(- )乘(* )除(/ )运算。

print(5 + 3)
print(5 - 3)
print(5 * 3)
print(5 / 3)
print(5 % 3)
# 乘方运算
print(5 ** 3)

运行程序。
在这里插入图片描述

浮点数

Python将带小数点的数字都称为浮点数 。大多数编程语言都使用了这个术语,它指出了这样一个事实:小数点可出现在数字的任何位置。每种编程语言都须细心设计,以妥善地
处理浮点数,确保不管小数点出现在什么位置,数字的行为都是正常的。

print(0.1 + 0.1)
print(0.2 + 0.2)
print(2 * 0.1)
print(2 * 0.2)

运行程序,输出的结果是你所预期的。
在这里插入图片描述
但需要注意的是,结果包含的小数位数可能是不确定的:

print(0.2 + 0.1)
print(3 * 0.1)

运行程序。
在这里插入图片描述
不过不用担心,所有语言都存在这样的一个问题。就现在而言,我们可以忽略这个小数位数,在后面,将有方法能够处理多余的小数。

使用函数str() 避免类型错误

接下来我们编写一段Python代码:

age = 20
message = "Happy" + age + "Birthday!"
print(message)

我们运行程序。
在这里插入图片描述
你可能会认为,上述代码会打印Happy20Birthday的祝福语,但很显然,控制台显示了错误信息。这是一个类型错误,在这个示例中,Python发现你使用了一个值为整形(int)的变量,但它不知道该如何解读这个值。像这样在字符串中使用整数时,需要显式地指出你希望Python将这个整数用作字符串,为此,可调用str(),它让Python将非字符串值表示为字符串。

age = 20
message = "Happy" + str(age) + "Birthday!"
print(message)

运行程序。
在这里插入图片描述
经过上述处理后,输出正常,没有错误。大多数情况下,在Python中使用数字都非常简单。如果结果出乎意料,请检查Python是否按你期望的方式将数字解读为了数值或字符串。

列表

由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复数的名称(如letters 、digits 或names )是个不错的主意。
在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。
一个简单的列表如下所示:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits)

运行程序,输出结果。
在这里插入图片描述
但这并不是你想要看到的,下面我们来看看如何访问列表元素。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[0])

这样便可访问到第一个列表元素,如果想访问第二个列表元素,中括号里就写1,注意:列表下标是从0开始而并非1。
Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1 ,可让Python返回最后一个列表元素:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[-1])

这段程序就会输出peach。这种语法其实是非常有用的,你可以在不知道列表长度的情况下得到最
后的元素。例如:索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。

修改、添加和删除元素

在实际的开发过程中,列表往往是动态改变的,所以,我们应该学会对列表进行更新操作。

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits[0] = 'Kiwi fruit'
print(fruits)

你可能出于众多原因要在列表中添加新元素,Python提供了多种在既有列表中添加新数据的方式。
最简单的方法就是将元素附加到列表末尾。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits.append('durian')
print(fruits)

方法append()将新元素添加到了列表的末尾,而不影响列表中原来的元素。

使用方法insert() 可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits.insert(0, 'durian')
print(fruits)

方法insert()将新元素添加到了列表的开头,事实上新元素的位置是由你决定的,这种操作将列表中原来的每个元素都右移一个位置。

接下来是对列表的删除操作。删除列表元素的方式也有很多。
如果知道要删除的元素在列表中的位置,可使用del语句。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
del fruits[0]
print(fruits)

使用方法pop() 删除元素。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruit = fruits.pop()
print(fruits)
print(fruit)

需要注意的是:方法pop()删除的是列表末尾的元素,并将该元素返回。
实际上,你可以使用pop()方法来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruit = fruits.pop(2)
print(fruits)
print(fruit)

有时候,你不知道要从列表中删除的值所处的位置。如果你只知道要删除的元素的值,可使用方法remove()。假如,我要从列表中删除banana,我可以这样写:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits.remove('banana')
print(fruits)

注意:方法remove()也会返回被删除的元素值,而且它只能删除第一个指定的值,也就是说,如果一个列表中存在多个你要删除的元素,那么它只能删除第一个,剩下的相同元素将不能删除。所以,我们得通过循环来判断是否删除了所有这样的值。

组织列表

在大多数情况下,我们往往需要对列表数据进行排序,Python提供了很多方法帮助我们对列表进行排序。
方法sort() 让你能够较为轻松地对列表进行排序。假设你有一个水果列表,并要让其中的水果按字母顺序排列。为简化这项任务,我们假设该列表中的所有值都是小写的。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits.sort()
print(fruits)

方法sort()会永久性地改变列表的元素位置,现在,水果是按照字母顺序排列的,它再也无法恢复到原来的顺序。

你还可以按与字母顺序相反的顺序传递,要想实现,只需向sort()方法传递参数reverse=True。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits.sort(reverse=True)
print(fruits)

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted() 。函数sorted() 让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(sorted(fruits))
print(fruits)

因为sorted()方法会返回一个新的列表,所以该方法是不会对原列表进行任何修改的。如果你要按与字母相反的顺序排序,同样地传入reverse=True即可。

逆序列表

要想倒着打印列表,可使用方法reverse()。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits.reverse()
print(fruits)

注意:方法reverse()会永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,要想实现,我们只需要再次调用reverse()方法即可。

获得列表长度

使用函数len()可以快速得到一个列表的长度。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(len(fruits))

遍历列表

在实际的开发工作中,我们经常需要对列表进行遍历,以获取列表的各项数据。我们已经学会从列表中取出每个元素,只需要 列表名[索引] 即可。但是,如果列表很长,数据非常多,这样获得每个列表的元素将会产生大量重复的代码。而且,当列表长度改变时,也得相应地改变代码,以免发生索引越界的问题。这个时候,遍历列表的工作,我们就可以通过for循环,让Python去处理这些问题。
下面使用for循环来输出水果列表中的所有水果:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
for fruit in fruits:
    print(fruit)

这段程序让Python从列表中每次都取出一种水果,并将其储存到变量fruit中,然后打印fruit的值。
循环这个概念应该不用过多解释,每门编程语言中都有循环的概念,在这段程序中,Python首先会读取第一行代码:

for fruit in fruits:

该行代码让Python获取列表中的第一个值,并将其存储到变量fruit中。接下来,读取下一行代码:

    print(fruit)

这行代码就是输出fruit变量的值。因为列表中还有其它元素,Python会自动回到第一行,重复刚才的步骤,直到列表中的元素被全部遍历。在Python中,是依靠代码的缩进来分析代码块的,所以,要想在每次循环中运行多行代码,就应该同时缩进。而要想在for循环结束时处理逻辑,我们就应该这样写:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
for fruit in fruits:
    print(fruit)
print('循环结束')

所以,在Python中,要严格控制代码的缩进,一个缩进的问题,将会导致整个程序的错误。

创建数值列表

在某些情况下,我们需要产生一个数字列表,在Python中提供了几种方式让开发者能够很轻松地创建数值列表。
使用函数range():

for value in range(1, 5):
    print(value)

注意:这段程序并不会输出1~5,而是只能输出到4,这是众多编程语言的一个共同特性,不用计较太多,记住就好。
要打印数字1~5,需要使用range(1,6) 。

使用range()函数创建数字列表:
我们可以将range()产生的数字直接转换为列表:

number = list(range(1, 6))
print(number)

使用range()函数时,我们还可以指定步长。例如:我要想输出1~10内的偶数:

number = list(range(2, 11, 2))
print(number)

使用range()函数几乎能创建任何数字列表。我们再来编写一个例子,创建一个列表,其中包含前10个整数的平方。在Python中,两个星号代表乘方运算。

numbers = []
for value in range(1, 11):
    number = value ** 2
    numbers.append(number)
print(numbers)

在数字列表中,Python提供了几个简单的统计函数。

digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(max(digits))
print(min(digits))
print(sum(digits))

这个不作解释,应该都能看懂。

经过上面的学习,我们已经学会如何访问列表,如何处理列表的所有元素。当然,Python还提供了一种处理列表部分元素的方法——切片。
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0 、1 和2 的元素。
我们来处理一个水果的列表:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[0:3])

这样就能得到前三个列表元素,如果你要得到第2~4个元素,可将起始索引设为1,将终止索引设为4:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[1:4])

如果你没有指定第一个索引,Python将自动从列表开头开始:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[:4])

要让切片终止于列表末尾,也可以使用类似的语法。如:要提取从第三个元素到列表末尾的所有元素,可将起始索引设为2,并省略终止索引。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[2:])

无论列表有多长,这种语法都能让很方便地处理列表。我们也可以与负数索引配合操作列表。
例如:如果你要输出列表中的最后三个元素:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[-3:])

上述程序可以输出列表的最后三个元素,即使列表长度发生变化,也依然如此。

遍历切片

如果要遍历列表的部分元素,可在for循环中使用切片,例如:我们遍历列表中的前三个元素。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
for fruit in fruits[0:3]:
    print(fruit)
复制切片

在某些情况下,我们往往需要根据原有的列表去创建新的列表。下面介绍如何复制列表。
通过列表的切片我们可以知道,要想得到整个列表,我们可以这样写:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
print(fruits[:])

那么复制操作就很简单了。

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits_new = fruits[:]
print(fruits)
print(fruits_new)

这样我们就得到了一个新的列表fruits_new,两个列表的元素均相同。
注意:如果我们这样写:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits_new = fruits
print(fruits_new)

虽然也得到了一个新列表,但是这其实是一个赋值操作,所以其实新列表和原列表指向的是同一个列表,我们测试一下:

fruits = ['apple', 'banana', 'pear', 'watermelon', 'peach']
fruits_new = fruits
print(fruits_new)
fruits.append("Hami melon")
print(fruits_new)

我们修改了fruits列表,但是输出fruits_new列表时发现,新列表也增加了一个元素,这并非是我们想要的结果。

元组

元组看起来就像列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

number = (4, 6, 2, 1, 9, 7)
print(number[0])
print(number[5])

注意:当我们试图去修改元组中的元素时。

number = (4, 6, 2, 1, 9, 7)
number[0] = 1

程序会报出错误。

Traceback (most recent call last):
  File "F:/Tool/workspace/PythonWorkSpace/Python100天学习/02/demo.py", line 6, in <module>
    number[0] = 1
TypeError: 'tuple' object does not support item assignment

因为Python是禁止对元组进行修改操作的。

遍历元组

和列表一样,我们也可以通过for循环来遍历元组。

number = (4, 6, 2, 1, 9, 7)
for num in number:
    print(num)
修改元组变量

在Python中虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,要想改变元组的元素,我们可以重新给元组赋值。

number = (4, 6, 2, 1, 9, 7)
for num in number:
    print(num)
number = (1, 2, 3, 4, 5, 6)
for num in number:
    print(num)

相比于列表,元组的操作就要简单许多了。如果需要存储的一组数据在程序的整个生命周期内都不变,可使用元组。

这样,我们就还剩下最后一个数据类型 字典 还没有介绍了,那么字典我们将会在后续的博客中讲解,关于Python的数据类型到这里我们就介绍完毕了。

目录
相关文章
|
1月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
258 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
14天前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
在 Python 编程中,掌握图的深度优先遍历(DFS)和广度优先遍历(BFS)是进阶的关键。这两种算法不仅理论重要,还能解决实际问题。本文介绍了图的基本概念、邻接表表示方法,并给出了 DFS 和 BFS 的 Python 实现代码示例,帮助读者深入理解并应用这些算法。
28 2
|
1月前
|
Python
【10月更文挑战第7天】「Mac上学Python 13」基础篇7 - 数据类型转换与NoneType详解
本篇将详细介绍Python中的常见数据类型转换方法以及 `NoneType` 的概念。包括如何在整数、浮点数、字符串等不同数据类型之间进行转换,并展示如何使用 `None` 进行初始赋值和处理特殊情况。通过本篇的学习,用户将深入理解如何处理不同类型的数据,并能够在代码中灵活使用 `None` 处理未赋值状态。
58 2
【10月更文挑战第7天】「Mac上学Python 13」基础篇7 - 数据类型转换与NoneType详解
|
1月前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
1月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
390 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
1月前
|
开发者 Python
Python学习九:file操作
这篇文章是关于Python文件操作的详细教程,包括文件的打开、读写、关闭,以及文件备份脚本的编写和文件定位操作。
21 2
|
1月前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
23 2
|
1月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
23 1
|
1月前
|
机器学习/深度学习 人工智能 架构师
|
1月前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
75 0
下一篇
无影云桌面