企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Python 数据类型 > 原文: [http://zetcode.com/lang/python/datatypes/](http://zetcode.com/lang/python/datatypes/) 在 Python 编程教程的这一部分中,我们讨论 Python 数据类型。 电子表格,文本编辑器,计算器或聊天客户端等计算机程序可处理数据。 用于各种数据类型的工具是现代计算机语言的基本组成部分。 ## Python 数据类型定义 数据类型是一组值以及对这些值的允许操作。 Python 有很多有用的数据类型。 Python 的数据类型构建在语言的核心中。 它们易于使用和直接。 ## Python 布尔值 我们的世界建立了双重性。 有天与地,水与火,阴与阳,男人与女人,爱与恨。 在 Python 编程语言中,布尔数据类型是具有以下两个值之一的原始数据类型:`True`或`False`。 这是基本的数据类型。 有趣的是,这种数据类型从一开始就不存在,但是后来才创建。 快乐的父母正在等待孩子的出生。 他们为两种可能性都选择了名称。 如果要成为男孩,他们可能选择了约翰。 如果要成为女孩,他们可能选择了维多利亚。 `kid.py` ```py #!/usr/bin/env python # kid.py import random male = False male = bool(random.randint(0, 1)) if male: print("We will use name John") else: print("We will use name Victoria") ``` 该脚本使用随机整数生成器来模拟我们的情况。 ```py import random ``` 在这里,我们导入用于计算随机数的随机模块。 ```py male = bool(random.randint(0, 1)) ``` 在这里,我们使用两个函数。 `randint()`函数从给定的整数边界返回一个随机数。 在我们的情况下为 0 或 1。`bool()`函数将整数转换为布尔值。 ```py if male: print("We will use name John") else: print("We will use name Victoria") ``` 我们打印名称。 `if`关键字适用于布尔值。 如果`male`为`True`,则在控制台上打印`"We will use name John"`。 如果它具有`False`值,我们将打印另一个字符串。 以下脚本显示了一些常见的值,它们被认为是`True`或`False`。 `bool_fun.py` ```py #!/usr/bin/env python # bool_fun.py print(bool(True)) print(bool(False)) print(bool("text")) print(bool("")) print(bool(' ')) print(bool(0)) print(bool()) print(bool(3)) print(bool(None)) ``` 该示例打印九个布尔值。 ```py $ ./bool_fun.py True False True False True False False True False ``` 这是`bool_fun.py`脚本的输出。 ## Python `None` 还有另一种特殊的数据类型-`None`。 此数据类型表示不存在,未知或为空。 `none.py` ```py #!/usr/bin/env python # none.py def function(): pass print(function()) ``` 在我们的示例中,我们定义一个函数。 功能将在本教程的后面部分介绍。 该功能不执行任何操作。 它不会显式返回任何值。 这样的函数将隐式返回`None`。 ```py $ ./none.py None ``` 这是`none.py`脚本的输出。 ## Python 数字 在 Python 编程语言中,我们有整数,浮点数和复数。 如果我们使用整数,那么我们将处理离散实体。 我们将使用整数来计算苹果。 `apples.py` ```py #!/usr/bin/env python # apples.py # number of baskets baskets = 16 # number of apples in a basket apples_in_basket = 24 # we get the total number of apples total = baskets * apples_in_basket print("There are total of", total, "apples") ``` 在脚本中,我们计算了苹果的总量。 我们使用乘法运算。 ```py $ ./apples.py There are total of 384 apples ``` 这是脚本的输出。 浮点数表示计算中的实数。 实数测量连续量。 假设一个短跑运动员跑了 1 个小时,跑了 9.87 秒。 他的公里/小时速度是多少? `sprinter.py` ```py #!/usr/bin/env python # sprinter.py # 100 m is 0.1 km distance = 0.1 # 9.87 s is 9.87/60*60 h time = 9.87 / 3600 speed = distance / time print("The average speed of a sprinter is {0} km/h".format(speed)) ``` 为了获得速度,我们将距离除以时间。 ```py print("The average speed of a sprinter is {0} km/h".format(speed)) ``` 我们使用`format()`函数构建消息并将其打印到控制台。 ```py $ ./sprinter.py The average speed of a sprinter is 36.4741641337 km/h ``` 这是`sprinter.py`脚本的输出。 值 36.4741641337 是浮点数。 ## Python 字符串 字符串是代表计算机程序中文本数据的数据类型。 可以使用单引号,双引号和三引号在 Python 中创建字符串。 当我们使用三引号时,字符串可以跨越多行而无需使用转义符。 `strings.py` ```py #!/usr/bin/env python # strings.py a = "proximity alert" b = 'evacuation' c = """ requiem for a tower """ print(a) print(b) print(c) ``` 在我们的示例中,我们为`a`,`b`和`c`变量分配了三个字符串字面值。 然后我们将它们打印到控制台。 ```py $ ./strings.py proximity alert evacuation requiem for a tower ``` 这是`strings.py`脚本的输出。 在处理字符串时,可以使用转义序列。 转义序列是在字符串中使用时具有特定用途的特殊字符。 ```py print(" bbb\raaa") # prints aaabbb ``` 回车`\r`是行尾到行首的控制字符。 `strophe.py` ```py #!/usr/bin/env python # strophe.py print("Incompatible, it don't matter though\n'cos someone's bound to hear my cry") print("Speak out if you do\nYou're not easy to find") ``` 新行是一个控制字符,它开始新的一行文本。 ```py $ ./strophe.py Incompatible, it don't matter though 'cos someone's bound to hear my cry Speak out if you do You're not easy to find ``` 接下来,我们检查退格控制字符。 ```py print("Python\b\b\booo") # prints Pytooo ``` 退格控制字符`\b`将光标向后移动一个字符。 在本例中,我们使用三个退格字符删除三个字母,并用三个`o`字符替换它们。 ```py print("Towering\tinferno") # prints Towering inferno ``` 水平选项卡在文本之间放置一个空格。 ```py "Johnie's dog" 'Johnie\'s dog' ``` 单引号和双引号可以嵌套。 或者,如果仅使用单引号,则可以使用反斜杠来转义单引号的默认含义。 ```py print("eagle has", len("eagle"), "characters") ``` 我们可以使用`len()`函数来计算字符串的长度(以字符为单位)。 如果在字符串后附加`r`,则会得到原始字符串。 转义序列不被解释。 `raw.py` ```py #!/usr/bin/env python # raw.py print(r"Another world\n") ``` ```py $ ./raw.py Another world\n ``` 我们得到的字符串包括换行符。 在下一个示例中,我们显示了字符串乘法和连接。 `strings2.py` ```py #!/usr/bin/python # strings2.py print("eagle " * 5) print("eagle " "falcon") print("eagle " + "and " + "falcon") ``` `*`运算符将字符串重复 n 次。 在我们的情况下是五次。 彼此相邻的两个字符串字面值会自动连接在一起。 我们还可以使用`+`运算符显式连接字符串。 ```py $ ./strings2.py eagle eagle eagle eagle eagle eagle falcon eagle and falcon ``` 这是`strings.py`脚本的输出。 Python 具有几种用于处理值集合的内置数据类型:元组,列表,集合和字典。 ## Python 元组 元组是不可变序列数据类型。 元组可以包含混合数据类型。 ```py fruits = ("oranges", "apples", "bananas") ``` 使用圆括号创建元组。 在这里,我们有一个由三种水果类型组成的元组。 ```py fruits = "apples", "oranges", "bananas" print(fruits) # prints ('apples', 'oranges', 'bananas') ``` 括号不是必须的。 我们可以省略它们。 `tuples.py` ```py #!/usr/bin/env python # tuples.py first = (1, 2, 3) second = (4, 5, 6) print("len(first) : ", len(first)) print("max(first) : ", max(first)) print("min(first) : ", min(first)) print("first + second :", first + second) print("first * 3 : ", first * 3) print("1 in first : ", 1 in first) print("5 not in second : ", 5 not in second) ``` 此示例显示了元组的几个基本操作。 `len()`函数返回第一个元组中的元素数。 `max()`函数返回最大值,`min()`最小值。 加法运算符将两个元组相加,乘法运算符将元组相乘。 `in`运算符确定该值是否在元组中。 ```py $ ./tuples.py len(first) : 3 max(first) : 3 min(first) : 1 first + second : (1, 2, 3, 4, 5, 6) first * 3 : (1, 2, 3, 1, 2, 3, 1, 2, 3) 1 in first : True 5 not in second : False ``` 这是脚本的输出。 接下来,我们将进行一些索引编制。 `tuples2.py` ```py #!/usr/bin/env python # tuples2.py five = (1, 2, 3, 4, 5) print("five[0] : ", five[0]) print("five[-1] : ", five[-1]) print("five[-2] : ", five[-2]) print("five[:] : ", five[:]) print("five[0:4] : ", five[0:4]) print("five[1:2] : ", five[1:2]) print("five[:2] : ", five[:2]) print("five[:-1] : ", five[:-1]) print("five[:9] : ", five[:9]) ``` 为了从元组中获取值,我们使用方括号`[]`。 请注意,我们从 0 开始计算索引。如果一个元组中有五个对象,则索引为`0...4`。 如果使用负索引,则从元组的末尾获得一个值。 因此,索引-1 获得最后一个元素,-2 获得最后一个但只有一个元素。 Python 支持从元组创建切片。 为此,我们使用`:`分隔符。 例如,`[0:4]`给出`(1, 2, 3, 4)`。 请注意,不包括最后一个元素。 我们可以省略切片中的一个或两个索引。 `[:4]`给出`(1, 2, 3, 4)`。 它来自第一个元素。 `[0:]`给出(`1,2,3,4,5`)。 这次,包含了最后一个元素。 如果超出范围,我们只需将所有元素都包含在元组中。 ```py $ ./tuples2.py five[0] : 1 five[-1] : 5 five[-2] : 4 five[:] : (1, 2, 3, 4, 5) five[0:4] : (1, 2, 3, 4) five[1:2] : (2,) five[:2] : (1, 2) five[:-1] : (1, 2, 3, 4) five[:9] : (1, 2, 3, 4, 5) ``` 这是输出。 元组可以包含几种混合数据类型。 `tuples_mix.py` ```py #!/usr/bin/env python # tuples_mix.py mix = (1, 2, "solaris", (1, 2, 3)) print("mix[1] :", mix[1]) print("mix[2] :", mix[2]) print("mix[3] :", mix[3]) print("mix[3][0] :", mix[3][0]) print("mix[3][1] :", mix[3][1]) print("mix[3][2] :", mix[3][2]) ``` 在我们的示例中,我们将数字,字符串和元组放入了混合元组中。 ```py $ ./tuples_mix.py mix[1] : 2 mix[2] : solaris mix[3] : (1, 2, 3) mix[3][0] : 1 mix[3][1] : 2 mix[3][2] : 3 ``` 为了从嵌套元组中获取元素,我们使用了两个方括号。 当我们处理包含一个元素的元组时,会有一个例外。 括号也用在表达式中。 我们如何区分一个表达式和一个元素元组? Python 编程语言的创建者决定使用逗号来表示我们正在使用元组。 `tuple_one.py` ```py #!/usr/bin/env python # tuple_one.py print((3 + 7)) print((3 + 7, )) ``` 在第一种情况下,我们有`and`表达式。 我们将 10 号打印到控制台。 在第二种情况下,我们处理一个元组。 我们打印一个包含数字 10 的元组。 ```py $ ./tuple_one.py 10 (10,) ``` 这是输出。 ## Python 列表 列表是可变序列数据类型。 它可以包含混合数据类型。 列表和元组具有许多共同的特征。 由于列表是可修改的数据类型,因此它具有一些其他操作。 一整章专门介绍 Python 列表。 ```py actors = ["Jack Nicholson", "Antony Hopkins", "Adrien Brody"] ``` 该列表是使用方括号`[]`创建的。 `list_simple.py` ```py #!/usr/bin/env python # simple_list.py num = [0, 2, 5, 4, 6, 7] print(num[0]) print(num[2:]) print(len(num)) print(num + [8, 9]) ``` 如前所述,我们可以在列表上使用与元组相同的操作。 ```py $ ./list_simple.py 0 [5, 4, 6, 7] 6 [0, 2, 5, 4, 6, 7, 8, 9] ``` 这是输出。 接下来,我们将对列表进行排序。 `list_sorting.py` ```py #!/usr/bin/env python # list_sorting.py numbers = [4, 3, 6, 1, 2, 0, 5] print(numbers) numbers.sort() print(numbers) ``` 在脚本中,我们有一个数字列表。 要对这些数字进行排序,我们使用内置的`sort()`函数。 ```py $ ./list_sorting.py [4, 3, 6, 1, 2, 0, 5] [0, 1, 2, 3, 4, 5, 6] ``` `reverse()`函数将以相反的顺序对列表的元素进行排序。 ```py numbers.reverse() # [5, 4, 3, 2, 1, 0] ``` 使用`count()`方法对列表中的元素进行计数。 `list_counting_elements.py` ```py #!/usr/bin/env python # list_counting_elements.py numbers = [0, 0, 2, 3, 3, 3, 3] print("zero is here", numbers.count(0), "times") print("one is here", numbers.count(1), "times") print("two is here", numbers.count(2), "time") print("three is here", numbers.count(3), "times") ``` 该脚本对列表中出现的次数进行计数。 ```py $ ./list_counting_elements.py zero is here 2 times one is here 0 times two is here 1 time three is here 4 times ``` 接下来,我们将处理从列表中插入和删除项目。 `list_modify.py` ```py #!/usr/bin/env python # list_modify.py names = [] names.append("Frank") names.append("Alexis") names.append("Erika") names.append("Ludmila") print(names) names.insert(0, "Adriana") print(names) names.remove("Frank") names.remove("Alexis") del names[1] print(names) del names[0] print(names) ``` 在我们的示例中,我们首先创建一个空名称列表。 我们使用`append()`函数将新项目添加到列表中。 元素以连续方式附加。 `insert()`函数在给定位置插入新元素。 现有元素不会被删除,它们将被重定位。 `remove()`函数从列表中删除特定项目。 如果要基于索引删除项目,请使用`del`关键字。 ```py $ ./list_modify.py ['Frank', 'Alexis', 'Erika', 'Ludmila'] ['Adriana', 'Frank', 'Alexis', 'Erika', 'Ludmila'] ['Adriana', 'Ludmila'] ['Ludmila'] ``` 这是`list_modify.py`脚本的输出。 以下程序提供了另外两个功能。 `list_modify2.py` ```py #!/usr/bin/env python # list_modify2.py first = [1, 2, 3] second = [4, 5, 6] first.extend(second) print(first) first[0] = 11 first[1] = 22 first[2] = 33 print(first) print(first.pop(5)) print(first) ``` `extend()`方法将整个列表附加到另一个列表。 要修改列表中的元素,我们可以使用赋值运算符。 `pop()`方法从列表中获取一个项目并返回它。 ```py $ ./list_modify2.py [1, 2, 3, 4, 5, 6] [11, 22, 33, 4, 5, 6] 6 [11, 22, 33, 4, 5] ``` 这是输出。 在下面的示例中,我们将找出元素的索引。 `list_index.py` ```py #!/usr/bin/env python # list_index.py numbers = [0, 1, 2, 3, 3, 4, 5] print(numbers.index(1)) print(numbers.index(3)) ``` 要在列表中查找索引,我们使用`index()`方法。 如果有更多的元素出现,则该方法返回第一个元素的索引。 ```py $ ./list_index.py 1 3 ``` 这是`list_index.py`脚本的输出。 接下来,我们将进行一些转换。 `list_transform.py` ```py #!/usr/bin/env python # list_transform.py first = [1, 2, 3] second = (4, 5, 6) print(tuple(first)) print(list(second)) print(first) print(second) ``` 我们可以使用`tuple()`函数从列表中创建一个元组,并使用`list()`函数从元组中创建一个列表。 注意原始对象没有被修改; 函数仅返回那些转换后的集合。 ```py $ ./list_transform.py (1, 2, 3) [4, 5, 6] [1, 2, 3] (4, 5, 6) ``` ## Python 集 `set`是无重复数据的无序数据集合。 集合支持诸如并集,相交或求差的运算; 与数学相似。 `sets.py` ```py #!/usr/bin/env python set1 = set(['a', 'b', 'c', 'c', 'd']) set2 = set(['a', 'b', 'x', 'y', 'z']) print("set1: " , set1) print("set2: " , set2) print("intersection: ", set1 & set2) print("union: ", set1 | set2) print("difference: ", set1 - set2) print("symmetric difference: ", set1 ^ set2) ``` 在我们的示例中,我们有两组。 我们使用`set()`函数创建集合。 相交操作返回都在`set1`和`set2`中的元素。 联合操作返回两个集合中的所有元素。 差异返回`set1`中的元素,但不是`set2`的元素。 最后,对称差返回`set1`或`set2`中的元素,但两者都不是。 ```py $ ./sets.py set1: set(['a', 'c', 'b', 'd']) set2: set(['a', 'x', 'b', 'y', 'z']) intersection: set(['a', 'b']) union: set(['a', 'c', 'b', 'd', 'y', 'x', 'z']) difference: set(['c', 'd']) symmetric difference: set(['c', 'd', 'y', 'x', 'z']) ``` 这是`sets.py`脚本的输出。 接下来,我们介绍一些其他带有集合的操作。 `set2.py` ```py #!/usr/bin/env python # sets2.py set1 = set([1, 2]) set1.add(3) set1.add(4) set2 = set([1, 2, 3, 4, 6, 7, 8]) set2.remove(8) print(set1) print(set2) print("Is set1 subset of set2 ? :", set1.issubset(set2)) print("Is set1 superset of set2 ? :", set1.issuperset(set2)) set1.clear() print(set1) ``` `add()`方法将一个项目添加到集合中。 `remove()`项目从集中删除一个项目。 `clear()`方法从集合中删除所有项目。 如果`set2`中的每个元素也在`set1`中,则`set1`是`set2`的超集。 如果`set1`中的每个元素也位于`set2`中,则`set1`是`set2`的子集。 ```py $ ./sets2.py set([1, 2, 3, 4]) set([1, 2, 3, 4, 6, 7]) Is set1 subset of set2 ? : True Is set1 superset of set2 ? : False set([]) ``` 如果我们需要一个不可变的集合,可以使用`frozenset()`函数创建一个冻结集合。 ```py fs = frozenset(['a', 'b', 'c']) ``` 该行从列表中创建一个冻结集。 ## Python 字典 Python 字典是一组键值对。 字典中的元素由键索引。 字典中的键必须唯一。 由于字典数据类型的重要性,本 Python 教程中有整整一章介绍了字典。 `dictionary_simple.py` ```py #!/usr/bin/env python # dictionary_simple.py words = { 'girl': 'Maedchen', 'house': 'Haus', 'death': 'Tod' } print(words['house']) print(words.keys()) print(words.values()) print(words.items()) print(words.pop('girl')) print(words) words.clear() print(words) ``` 我们的第一个示例显示了字典数据类型的一些基本用法。 我们打印特定的值,字典的键和值。 `items()`方法返回一个字典(键,值)对的列表作为元组。 ```py $ ./dictionary_simple.py Haus ['house', 'girl', 'death'] ['Haus', 'Maedchen', 'Tod'] [('house', 'Haus'), ('girl', 'Maedchen'), ('death', 'Tod')] Maedchen {'house': 'Haus', 'death': 'Tod'} {} ``` 在 Python 教程的这一部分中,我们描述了 Python 数据类型。