Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。
在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不同的含义。
class MyClass:
def __init__(self):
self._internal_var = 10
def internal_method(self):
pass
obj = MyClass()
print(obj._internal_var) # 可以访问,但是应该避免这么做
class MyClass:
def __init__(self):
self.__internal_var = 10
obj = MyClass()
print(obj.__internal_var) # 这会引发AttributeError错误
print(obj._MyClass__internal_var) # 这样可以访问
双下划线开头和结尾的变量(例如 var)是特殊变量,它们有特殊的含义,这些变量通常被称为"魔术"变量或方法。比如 init、str 等。
class MyClass:
def __init__(self, value):
self.value = value
def __str__(self):
return f"MyClass with value {self.value}"
obj = MyClass(10)
print(obj) # 输出:MyClass with value 10
当需要处理的数据集大于可用内存时,我们不能一次性将所有数据加载到内存中。但我们可以使用一些策略来处理这种情况:
在Python中,对列表进行去重的一个常见方法是使用set数据结构,然后再转回到list。因为在set中,所有元素都是唯一的。以下是一个简单的代码示例:
def remove_duplicates(lst):
return list(set(lst))
original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9]
print(remove_duplicates(original_list)) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
需要注意的是,使用set进行去重会丢失原始列表的顺序。如果你希望保留元素的顺序,你可以使用dict从Python 3.7开始,字典保持了插入顺序,所以我们可以通过将列表元素作为字典的键来达到去重且保持顺序的效果。
def remove_duplicates_keep_order(lst):
return list(dict.fromkeys(lst))
original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9]
print(remove_duplicates_keep_order(original_list)) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
在Python中,列表的元素如果是字典的话,通常情况下不能直接进行去重,因为字典是不可哈希的(unhashable),不能被用作集合(set)或字典的键。但我们可以通过一些其他的方法来去重。
import json
# 列表中的元素是字典
list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": 2}, {"a": 3, "b": 4}]
# 初始化一个空集合来存储json字符串
json_set = set()
# 遍历列表中的每个字典
for d in list_of_dicts:
# 将字典转化为排序后的json字符串,然后添加到集合中
json_set.add(json.dumps(d, sort_keys=True))
# 初始化一个空列表来存储去重后的字典
unique_dicts = []
# 遍历集合中的每个json字符串
for i in json_set:
# 将json字符串转回字典,然后添加到列表中
unique_dicts.append(json.loads(i))
print(unique_dicts)
# 列表中的元素是字典
list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": 2}, {"a": 3, "b": 4}]
# 初始化一个空集合来存储元组
tuple_set = set()
# 遍历列表中的每个字典
for d in list_of_dicts:
# 将字典的键值对排序后转化为元组,然后添加到集合中
tuple_set.add(tuple(sorted(d.items())))
# 初始化一个空列表来存储去重后的字典
unique_dicts = []
# 遍历集合中的每个元组
for t in tuple_set:
# 将元组转回字典,然后添加到列表中
unique_dicts.append(dict(t))
print(unique_dicts)
正则表达式是处理字符串的强大工具,它可以用于匹配、查找、替换特定模式的字符串。Python中的re模块提供了正则表达式相关的操作。
以下是一些基本的正则表达式的使用方法:
import re
result = re.search('Python', 'I love Python')
if result:
print("Match found")
else:
print("Match not found")
import re
result = re.findall('a', 'I am a Python developer')
print(result) # 输出:['a', 'a', 'a']
import re
result = re.sub('Python', 'Java', 'I am a Python developer')
print(result) # 输出:'I am a Java developer'
import re
result = re.split('\s', 'I am a Python developer')
print(result) # 输出:['I', 'am', 'a', 'Python', 'developer']
import re
pattern = re.compile('Python')
result = pattern.search('I love Python')
print(result.group()) # 输出:'Python'
以上都是一些基本的用法,实际上正则表达式的功能远不止于此,它有很多的匹配模式和特殊序列可以用于处理复杂的字符串匹配和操作。
关注我,后续题目不断更新中