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月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
53 3
|
1月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
34 4
|
11天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
2天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
13天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
17天前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
16天前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
13天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
12天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
13天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。