上海专业网站设计制作,网站建设作者墙这个模板,小程序api函数,08影院源码WordPress1. 内置的数据结构有哪几种
Python 中有多种内置的数据结构#xff0c;主要分为以下几种#xff1a;
1.1 数值类型
整数#xff08;int#xff09;#xff1a;用于表示整数#xff0c;没有大小限制。例如#xff1a;1, -5, 100。浮点数#xff08;float#xff09;…1. 内置的数据结构有哪几种
Python 中有多种内置的数据结构主要分为以下几种
1.1 数值类型
整数int用于表示整数没有大小限制。例如1, -5, 100。浮点数float用于表示小数。例如3.14, -0.5。复数complex由实部和虚部组成虚部以 j 或 J 结尾。例如3 4j。
1.2 序列类型
字符串str由零个或多个字符组成的不可变序列。例如hello。列表list一种可变的序列类型可以包含不同类型的元素。例如[1, a, True]。元组tuple一种不可变的序列类型使用圆括号表示。例如(1, 2, 3)。
1.3 集合类型
集合set无序且唯一元素的集合可变类型。例如{1, 2, 3}。冻结集合frozenset不可变的集合类型。例如frozenset([1, 2, 3])。
1.4 映射类型
字典dict以键值对形式存储数据键是唯一的可变类型。例如{name: Alice, age: 25}。 要点
不同的数据结构在内存占用和性能表现上有所差异。例如列表在插入和删除元素时效率相对较低尤其是在列表头部操作而集合在查找元素时具有较高的效率时间复杂度为 O (1)。在实际应用中需要根据具体的需求选择合适的数据结构。比如当需要存储有序且可重复的数据时列表是不错的选择当需要快速判断元素是否存在时集合更为合适。 2. 如何实现单例模式请写出三种实现方式
2.1 使用模块
Python 的模块在第一次导入时会被执行并且会将模块的内容加载到内存中后续的导入操作都会使用同一个模块对象因此可以利用这一特性实现单例模式。
python
# singleton.py
class Singleton:def __init__(self):passsingleton_instance Singleton()在其他文件中使用
python
from singleton import singleton_instance2.2 使用装饰器
python
def singleton(cls):instances {}def get_instance(*args, **kwargs):if cls not in instances:instances[cls] cls(*args, **kwargs)return instances[cls]return get_instancesingleton
class MyClass:def __init__(self):passobj1 MyClass()
obj2 MyClass()
print(obj1 is obj2) # 输出: True2.3 使用类方法
python
class Singleton:_instance Noneclassmethoddef get_instance(cls):if cls._instance is None:cls._instance cls()return cls._instanceobj1 Singleton.get_instance()
obj2 Singleton.get_instance()
print(obj1 is obj2) # 输出: True要点
单例模式在实际开发中有很多应用场景比如数据库连接池、日志记录器等。在多线程环境下使用单例模式时需要考虑线程安全问题。例如使用类方法实现单例模式时在多线程环境下可能会创建多个实例需要使用锁机制来保证线程安全。
示例
python
import threadingclass Singleton:_instance None_lock threading.Lock()classmethoddef get_instance(cls):with cls._lock:if cls._instance is None:cls._instance cls()return cls._instance3. 如何反转一个整数
例如 -168 -- -861
python
def reverse_integer(x):sign -1 if x 0 else 1num_str str(abs(x))reversed_str num_str[::-1]return sign * int(reversed_str)print(reverse_integer(-168)) # 输出: -861要点
实现整数反转的关键步骤是先处理符号然后将绝对值转换为字符串进行反转最后再加上符号。在处理整数反转时需要考虑整数溢出的问题。虽然 Python 的整数类型没有大小限制但在某些需要与其他语言交互或对性能有严格要求的场景下可能需要考虑溢出问题。另外可以对输入进行合法性检查确保输入是有效的整数。 4. 用一行代码写出 1 2 3 ... 10000
python
print(sum(range(1, 10001)))要点
使用 sum 函数和 range 函数可以在一行代码中完成 1 到 10000 的求和。同样对于较大的范围使用数学公式 n * (n 1) // 2 可以更高效地计算。另外可以将这个功能封装成一个函数方便计算任意范围的整数求和。以下是示例代码
示例
python
def sum_range(n):return n * (n 1) // 2print(sum_range(10000)) 5. 遍历列表时删除元素的正确做法
5.1 使用列表推导式创建新列表
python
original_list [1, 2, 3, 4, 5]
new_list [i for i in original_list if i ! 3]
print(new_list)5.2 反向遍历列表并删除元素
python
original_list [1, 2, 3, 4, 5]
for i in range(len(original_list) - 1, -1, -1):if original_list[i] 3:del original_list[i]
print(original_list)要点
正确的做法有使用列表推导式创建新列表和反向遍历列表并删除元素。列表推导式的优点是代码简洁易于理解但会创建一个新的列表占用额外的内存。反向遍历列表的方法不会创建新的列表但代码相对复杂一些。在处理大型列表时需要根据具体情况选择合适的方法。另外还可以使用迭代器和 filter 函数来实现相同的功能。 6. 可变类型和不可变类型
可变类型对象创建后其值可以被修改的类型。常见的可变类型有列表list、集合set、字典dict。
python
my_list [1, 2, 3]
my_list.append(4)
print(my_list) # 输出: [1, 2, 3, 4]不可变类型对象创建后其值不能被修改的类型。常见的不可变类型有整数int、浮点数float、字符串str、元组tuple。
python
my_str hello
# 下面这行代码会报错因为字符串是不可变的
# my_str[0] H要点
可变类型和不可变类型在函数参数传递时表现不同。不可变类型作为参数传递时函数内部对参数的修改不会影响到外部的变量而可变类型作为参数传递时函数内部对参数的修改会影响到外部的变量。
示例
python
def modify_immutable(num):num num 1return numdef modify_mutable(lst):lst.append(4)return lsta 1
b [1, 2, 3]
print(modify_immutable(a)) # 输出: 2
print(a) # 输出: 1
print(modify_mutable(b)) # 输出: [1, 2, 3, 4]
print(b) # 输出: [1, 2, 3, 4]7. is 和 有什么区别 用于比较两个对象的值是否相等。
python
a [1, 2, 3]
b [1, 2, 3]
print(a b) # 输出: Trueis 用于比较两个对象是否是同一个对象即它们是否指向同一块内存地址。
python
a [1, 2, 3]
b [1, 2, 3]
print(a is b) # 输出: Falsec a
print(a is c) # 输出: True要点
在实际应用中对于简单的数据类型如整数、字符串等Python 会对一些常用的值进行缓存因此在一定范围内使用 is 比较可能会得到意外的结果。
示例
python
a 100
b 100
print(a is b) # 输出: Truea 1000
b 1000
print(a is b) # 输出: False8. 求出列表所有奇数并构造新列表
python
original_list [1, 2, 3, 4, 5]
odd_list [i for i in original_list if i % 2 ! 0]
print(odd_list) # 输出: [1, 3, 5]要点
可以使用列表推导式来筛选出列表中的奇数元素并构建新列表。除了列表推导式还可以使用 filter 函数和 lambda 表达式来实现相同的功能。
示例
python
original_list [1, 2, 3, 4, 5]
odd_list list(filter(lambda x: x % 2 ! 0, original_list))
print(odd_list) # 输出: [1, 3, 5]