一文彻底讲清Python的内置数据类型,从数字、字符串到字典
更新于:2025-03-24 11:56:34

介绍

Python 是一种动态类型语言,这意味着变量的类型是根据它所保存的值自动确定的。要编写高效且无错误的代码,了解 Python 提供的各种内置数据类型至关重要。这些数据类型构成了 Python 编程的基础,并且几乎用于每个 Python 应用程序。

Python 的内置数据类型可以大致分为几组:

  • 数字类型(例如intfloatcomplex
  • 序列类型(例如listtuplerange
  • 文本类型(例如str
  • 映射类型(例如dict
  • 集合类型(例如setfrozenset
  • 布尔类型(例如bool
  • 二进制类型(例如bytesbytearraymemoryview

数字数据类型

P ython 提供了三种不同的数值数据类型: intfloatcomplex 。这些类型用于表示数字并执行各种数学运算。

1. 整数(int)

int类型用于表示整数,包括正数、负数以及零。 Python的int类型是无界的,这意味着只要有足够的内存,它就可以表示任意大的数字。

x = 42# Positive integery = -15# Negative integerz = 0# Zeroprint(type(x))# Output:

在此示例中, xyz均为整数。 Python 可以毫不费力地处理非常大的整数:

large_number = 10**100# A very large integerprint(large_number)

2. 浮点数(float)

float类型表示带小数点的实数。这些数字也可以用科学计数法来表示。 Python 使用双精度(64 位)来存储浮点数。

a = 3.14# Floating-point numberb = -0.001# Negative floatc = 1.5e3# Scientific notation for 1500.0print(type(a))# Output:

在此示例中, abc是浮点数。 float类型对于表示需要精度的值非常有用,例如测量或财务计算。

3. 复数(complex)

Python 还支持复数,即a + bj形式的数字,其中a是实部, b是虚部。复数在科学和工程计算中特别有用。

c1 = 2 + 3j# Complex number with real part 2 and imaginary part 3c2 = -1j# Complex number with only an imaginary partprint(c1.real)# Output: 2.0 (real part of c1)print(c1.imag)# Output: 3.0 (imaginary part of c1)print(type(c1))# Output:

在此示例中, c1c2是复数。您可以使用.real.imag属性访问实部和虚部。

数值数据类型摘要:

  • 整数 (int) :整数,大小不受限制。
  • 浮点数 (float) :带有小数点或科学记数法的数字。
  • 复数(complex :具有实部和虚部的数字,在专业领域很有用。

序列数据类型

Python 提供了几种内置的序列数据类型,允许您以有序的方式存储和管理项目集合。最常见的序列类型是listtuplerange 。序列类型支持索引、切片和迭代等操作。

1. 列表(list)

list数据类型是可变序列,这意味着您可以在创建列表后更改、添加或删除元素。列表用途广泛,可以容纳不同类型的项目,包括其他列表。

fruits = ["apple", "banana", "cherry"]numbers = [1, 2, 3, 4, 5]mixed = [1, "apple", 3.14, True]print(fruits[0])# Output: applefruits[1] = "orange"# Modifying the listprint(fruits)# Output: ['apple', 'orange', 'cherry']

在此示例中,列表fruits包含字符串元素,但列表也可以包含数字、布尔值,甚至是混合类型,如mixed中所示。修改列表的能力使它们成为动态更改集合的绝佳工具。

列表的常见操作:

  • 添加项目list.append(item)list.insert(index, item)
  • 删除项目list.remove(item)list.pop(index)
  • 切片:使用list[start:end]提取子集
fruits.append("grape")print(fruits)# Output: ['apple', 'orange', 'cherry', 'grape']

2. 元组(tuple)

tuple是不可变的序列,这意味着一旦创建,其元素就无法修改。当您想要对在整个程序中不应更改的项目进行分组时,元组非常有用。

coordinates = (10, 20)person = ("John", 25, "Engineer")print(coordinates[0])# Output: 10

在此示例中, coordinates组包含两个元素。元组通常用于存储相关但不可更改的数据,例如坐标或记录。

为什么使用元组?

  • 不变性:由于元组是不可变的,因此它们具有更高的内存效率,并且可以用作字典中的键(与列表不同)。
  • 打包和拆包:元组允许轻松分配和交换变量。
x, y = coordinates# Unpacking the tupleprint(x, y)# Output: 10 20

3. 范围(range)

range类型表示数字序列,通常用于循环特定次数。 range对象具有内存效率高,因为它不会将数字存储在内存中,而是动态生成它们。

r = range(5)# Creates a range from 0 to 4 (5 is excluded)print(list(r))# Output: [0, 1, 2, 3, 4]

还可以指定开始、停止和步骤以进行更多控制:

r = range(1, 10, 2)# Creates a range from 1 to 9, stepping by 2print(list(r))# Output: [1, 3, 5, 7, 9]

范围经常用在for循环中:

for i in range(3):print(i)# Output: 0 1 2

序列数据类型总结:

  • 列表 (list) :可变的、有序的项目集合。可以添加、删除或更改元素。
  • 元组 (tuple) :不可变的、有序的项目集合。非常适合不应更改的数据。
  • 范围(range :高效表示数字序列,常用于循环中。

这些序列类型中的每一种都提供独特的优势,具体取决于您是否需要可变性或效率。列表非常适合动态数据,而元组更适合不会更改的固定数据。

文本数据类型

在Python中,用于表示文本的主要数据类型是str (字符串)类型。字符串是 Unicode 字符序列,因此可用于存储和操作文本数据,包括单词、句子,甚至大量文本。

1. 字符串(str)

Python 中的字符串是用单引号 ( ' ) 或双引号 ( " ) 括起来的字符序列。字符串是不可变的,这意味 着一旦创建,就无法修改。如果需要更改字符串,则必须创建新字符串一。

greeting = "Hello, World!"name = 'John Doe'print(type(greeting))# Output:

还可以对多行字符串使用三引号( '''""" ):

message = """This is a multi-line string.You can write across multiple lines."""print(message)

2. 常用字符串操作

尽管字符串是不可变的,但 Python 提供了多种操作字符串和生成新字符串的方法。

  • 连接:您可以使用+运算符组合字符串。
first_name = "John"last_name = "Doe"full_name = first_name + " " + last_nameprint(full_name)# Output: John Doe
  • 重复:使用*运算符多次重复字符串。
repeat = "Hello! " * 3print(repeat)# Output: Hello! Hello! Hello!
  • 切片:您可以使用切片提取字符串的一部分。
text = "Python Programming"print(text[0:6])# Output: Pythonprint(text[-11:])# Output: Programming
  • 长度len()函数返回字符串中的字符数。
print(len(text))# Output: 18

3. 字符串方法

Python 提供了多种内置的字符串方法来操作和处理字符串。以下是一些常用的字符串方法:

  • upper() :将字符串转换为大写。
text = "hello"print(text.upper())# Output: HELLO
  • lower() :将字符串转换为小写。
text = "HELLO"print(text.lower())# Output: hello
  • strip() :删除任何前导和尾随空格。
text = "hello"print(text.strip())# Output: hello
  • replace() :用另一个子字符串替换出现的子字符串。
text = "Python is fun"print(text.replace("fun", "awesome"))# Output: Python is awesome
  • split() :根据分隔符将字符串拆分为列表。
text = "apple, banana, cherry"fruits = text.split(", ")print(fruits)# Output: ['apple', 'banana', 'cherry']
  • join() :使用指定的分隔符将列表的元素连接成字符串。
fruits = ['apple', 'banana', 'cherry']result = ", ".join(fruits)print(result)# Output: apple, banana, cherry

4. 字符串格式化

Python 提供了强大的字符串格式化方法,例如 f 字符串,它允许您将表达式嵌入到字符串文本中。 F 字符串从 Python 3.6 开始可用。

使用 f 字符串的示例:

name = "Alice"age = 30intro = f"My name is {name} and I am {age} years old."print(intro)# Output: My name is Alice and I am 30 years old.

此方法提供了一种更具可读性和更有效的方式来在字符串中嵌入变量和表达式。

文本数据类型总结:

  • 字符串 (str) :用于存储和操作文本数据的不可变字符序列。
  • 常见操作:字符串连接、切片、重复、求长度。
  • 字符串方法:包括upper()replace()split()等操作来转换或处理字符串。
  • 字符串格式化:使用 f-string 轻松将变量和表达式嵌入到字符串中。

str类型是 Python 中处理文本的基础。了解如何有效地操作和格式化字符串对于在程序中处理基于文本的数据至关重要。

映射数据类型

在Python中,主要的内置映射数据类型是dict (字典)。字典是键值对的无序集合,其中每个键必须是唯一且不可变的,而值可以是任何类型。字典对于基于唯一键存储和检索数据非常有效。

1. 字典(dict)

字典是使用大括号{}和一系列键值对创建的,其中每个键与其值之间用冒号:分隔。您还可以使用dict()构造函数创建字典。

person = {"name": "Alice","age": 30,"job": "Engineer"}print(person["name"])# Output: Aliceprint(person.get("age"))# Output: 30

在此示例中,字典person使用键"name""age""job"存储有关个人的信息。可以通过引用该键来访问与每个键关联的值。

2. 添加、修改和删除元素

字典是可变的,这意味着您可以在创建字典后添加、更改或删除键值对。

  • 添加新的键值对
person["city"] = "New York"print(person)# Output: {'name': 'Alice', 'age': 30, 'job': 'Engineer', 'city': 'New York'}
  • 修改现有值
person["age"] = 31print(person["age"])# Output: 31
  • 删除键值对
person.pop("job")print(person)# Output: {'name': 'Alice', 'age': 31, 'city': 'New York'}

还可以使用del关键字来删除键值对:

del person["city"]print(person)# Output: {'name': 'Alice', 'age': 31}

3. 字典方法

字典提供了许多管理键值对的有用方法。一些最常见的方法包括:

  • keys() :返回字典中所有键的类似列表的对象。
print(person.keys())# Output: dict_keys(['name', 'age'])
  • values() :返回所有值的类似列表的对象。
print(person.values())# Output: dict_values(['Alice', 31])
  • items() :以元组形式返回所有键值对的类似列表的对象。
print(person.items())# Output: dict_items([('name', 'Alice'), ('age', 31)])
  • update() :使用另一个字典或迭代器中的键值对更新字典。
new_data = {"job": "Designer", "city": "San Francisco"}person.update(new_data)print(person)# Output: {'name': 'Alice', 'age': 31, 'job': 'Designer', 'city': 'San Francisco'}

4. 使用字典作为查找表

字典通常用作查找表,因为它们允许您快速查找与特定键关联的值。当您需要有效地存储和检索数据时,这特别有用。

prices = {"apple": 0.99,"banana": 0.50,"cherry": 2.50}print(prices["apple"])# Output: 0.99

在这里,字典prices充当查找表,可以根据商品名称快速查找商品的价格。

5. 字典推导式

与列表推导式类似,您可以使用字典推导式以简洁且可读的方式创建字典。

squares = {x: x**2 for x in range(5)}print(squares)# Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

此示例生成一个字典,其中键是从04的数字,值是它们的平方。

映射数据类型总结:

  • 字典 (dict) :键值对的无序集合。键必须是唯一且不可变的,而值可以是任何类型。
  • Mutable :创建字典后可以添加、修改和删除元素。
  • 高效查找:字典非常适合需要基于唯一键进行快速查找的情况。
  • 字典方法:有用的方法包括keys()values()items()update()

字典是 Python 中最强大、最灵活的数据类型之一,这使得它们对于高效的数据组织和检索至关重要。

集合数据类型

在 Python 中,集合是无序、唯一元素的集合。 Python 提供两种类型的集合: setfrozenset 。当您需要存储不重复的项目或执行数学集合运算(例如并集、交集和差集)时,集特别有用。

1. 集合(set)

set是不可变对象的无序集合。但是,集合本身是可变的,这意味着您可以在创建集合后添加或删除元素。由于集合是无序的,因此它们不支持像列表或元组那样的索引或切片。

fruits = {"apple", "banana", "cherry"}print(fruits)# Output: {'apple', 'banana', 'cherry'}# Adding an elementfruits.add("orange")print(fruits)# Output: {'apple', 'banana', 'cherry', 'orange'}# Removing an elementfruits.remove("banana")print(fruits)# Output: {'apple', 'cherry', 'orange'}

在此示例中,集合fruits包含三个独特的元素。 .add()方法允许我们添加新元素, .remove()方法允许我们删除元素。

集合的性质:

  • 唯一元素:设置自动丢弃重复值。
  • 无序:集合中的元素没有定义的顺序,并且每次打印或访问集合时顺序都可能更改。
  • 可变:您可以添加或删除元素。

重要的设置操作:

集合支持许多数学集合运算,例如并、交、差和对称差。

  • Union :组合两个集合中的所有唯一元素。
set1 = {1, 2, 3}set2 = {3, 4, 5}union_set = set1.union(set2)print(union_set)# Output: {1, 2, 3, 4, 5}
  • 交集:仅返回两个集合共有的元素。
intersection_set = set1.intersection(set2)print(intersection_set)# Output: {3}
  • 差异:返回一个集合中但不在另一个集合中的元素。
difference_set = set1.difference(set2)print(difference_set)# Output: {1, 2}
  • 对称差异:返回任一集合中的元素,但不返回两个集合中的元素。
symmetric_difference_set = set1.symmetric_difference(set2)print(symmetric_difference_set)# Output: {1, 2, 4, 5}

2.冰冻集合(frozenset)

frozenset是集合的不可变版本。一旦创建,就无法修改其元素(即无法添加或删除元素)。但是,与集合一样, frozenset支持所有标准集合运算,例如并集、交集和差集。

例子:

frozen_fruits = frozenset(["apple", "banana", "cherry"])print(frozen_fruits)# Output: frozenset({'apple', 'banana', 'cherry'})# You cannot modify a frozenset, but you can perform set operationsset_a = frozenset([1, 2, 3])set_b = frozenset([3, 4, 5])print(set_a.intersection(set_b))# Output: frozenset({3})

何时使用frozenset

  • 不可变需求:当您需要一个在创建后无法更改的集合时(例如,用作字典键或确保该集合在整个程序中保持不变)。
  • 性能:由于不变性, frozenset比常规集合具有轻微的性能优势,特别是在频繁访问集合的情况下。

3. 常用的集合方法

setfrozenset都支持多种内置方法来执行操作和查询数据。

  • add() (仅限集合):向集合添加一个元素。
my_set = {1, 2, 3}my_set.add(4)print(my_set)# Output: {1, 2, 3, 4}
  • remove() (仅限集合):从集合中删除一个元素。
my_set.remove(2)print(my_set)# Output: {1, 3, 4}
  • union() :组合两个集合中的所有唯一元素。
set1 = {1, 2, 3}set2 = {3, 4, 5}print(set1.union(set2))# Output: {1, 2, 3, 4, 5}
  • intersection() :仅返回两个集合共有的元素。
print(set1.intersection(set2))# Output: {3}
  • difference() :返回一组中的元素,但不返回另一组中的元素。
print(set1.difference(set2))# Output: {1, 2}
  • symmetric_difference() :返回任一集合中但不在两个集合中的元素。
print(set1.symmetric_difference(set2))# Output: {1, 2, 4, 5}

集合数据类型总结:

  • 集合 (set) :唯一的、可变元素的无序集合。非常适合存储不允许重复且需要集合操作的集合。
  • 冻结集(frozenset :不可变集,支持集合操作,但创建后无法修改。
  • 集合运算:并、交、差和对称差是处理集合的强大工具。

集合对于管理唯一项的集合和执行基于集合的操作非常有效,而frozenset在需要时提供不变性。

布尔数据类型

在 Python 中,布尔数据类型 ( bool ) 表示两个可能值之一: TrueFalse 。这些值通常用在条件和控制流中来管理程序逻辑。布尔值是比较运算、决策和循环结构的重要组成部分。

1.布尔值(bool)

bool数据类型只有两个可能的值:

  • True
  • False

Python 将TrueFalse视为整数的特殊情况,其中True相当于1False相当于0 。然而,布尔值最常用于逻辑运算,而不是算术运算。

is_active = Trueis_valid = Falseprint(is_active)# Output: Trueprint(is_valid) # Output: False

2. 布尔表达式

布尔值通常是比较或逻辑表达式的结果。返回布尔值的一些常见运算符是:

  • 比较运算符==!=<<=>=
  • 逻辑运算符andornot

比较运算符示例:

a = 10b = 20print(a == b)# Output: False (10 is not equal to 20)print(a < b) # Output: True (10 is less than 20)

在此示例中,比较运算符用于评估ab之间的关系,返回布尔值( TrueFalse )。

逻辑运算符示例:

x = Truey = Falseprint(x and y)# Output: False (both must be True for 'and' to return True)print(x or y) # Output: True (only one needs to be True for 'or' to return True)print(not x)# Output: False (not inverts the boolean value)
  • and :如果两个操作数均为True则返回True ;否则,它返回False
  • or :如果至少一个操作数为True则返回True ;否则,它返回False
  • not :反转布尔值,将True变为False ,反之亦然。

3.其他数据类型的布尔值

在 Python 中,许多数据类型都有隐式布尔值。这在ifwhile等条件语句中特别有用。以下值在 Python 中被视为False

  • None
  • 0 (整数或浮点数)
  • '' (空字符串)
  • [] (空列表)
  • {} (空字典)
  • set() (空集)
  • False

其他一切都被认为是True

print(bool(0))# Output: False (zero is treated as False)print(bool("")) # Output: False (empty string is False)print(bool([1, 2])) # Output: True (non-empty list is True)print(bool(None)) # Output: False

这种行为在编写条件逻辑时非常有用,因为 Python 会自动将表达式转换为其布尔等价物。

4. 控制结构中的布尔上下文

布尔值是 Python 中控制流的基础。它们帮助确定ifelseelifwhilefor语句中代码块的执行。

if语句示例:

age = 18if age >= 18:print("You are an adult.")# This block executes because the condition is Trueelse:print("You are a minor.")

在此示例中, if语句评估age >= 18是否为True 。如果是,则运行第一个代码块;否则,运行else块。

while循环示例:

count = 0while count < 5:print(count)count += 1

在此while循环中,在每次迭代之前都会评估条件count < 5 。只要条件为True ,循环就会继续执行。

布尔数据类型总结:

  • 布尔值 (bool) :表示两个值之一: TrueFalse
  • 比较和逻辑运算符:返回布尔值以评估条件。
  • 隐式布尔值:某些值(如0None 、空集合和False被视为False ,而非空对象和非零数字被视为True
  • 控制流程:布尔值对于通过ifelseelifwhilefor语句控制程序流程至关重要。

布尔值是编程逻辑的基础,允许您根据条件做出决策并控制代码的行为。