Python面试高频100题【11~15题】

这篇具有很好参考价值的文章主要介绍了Python面试高频100题【11~15题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。

十一、请介绍下Python中单下划线与双下划线区别

在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不同的含义。

  1. 单下划线 _
  • 单下划线开头(例如 _var)是一种约定,用来指示这个名称是供内部使用的。它告诉读代码的人该变量或者方法主要被用于类或模块的内部,尽管Python并不会真正地阻止你在外部访问它。
class MyClass:
    def __init__(self):
        self._internal_var = 10

    def internal_method(self):
        pass

obj = MyClass()
print(obj._internal_var)  # 可以访问,但是应该避免这么做

  1. 双下划线 __
  • 双下划线开头(例如 __var)表示这个变量或方法不仅仅是用于内部,Python会对其进行名称修饰(name mangling),用来避免命名冲突。这意味着类定义中以双下划线开头的名称如 __var 实际上会被改写为 _classname__var
class MyClass:
    def __init__(self):
        self.__internal_var = 10

obj = MyClass()
print(obj.__internal_var)  # 这会引发AttributeError错误
print(obj._MyClass__internal_var)  # 这样可以访问

双下划线开头和结尾的变量(例如 var)是特殊变量,它们有特殊的含义,这些变量通常被称为"魔术"变量或方法。比如 initstr 等。

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

十二、一个服务器有4GB的内存,怎么去读取5GB 的数据?

当需要处理的数据集大于可用内存时,我们不能一次性将所有数据加载到内存中。但我们可以使用一些策略来处理这种情况:

  1. 分块处理(Chunking):这种方法涉及到将数据分割成小块,每次只读取一部分到内存中进行处理。例如,如果你正在处理一个大文件,你可以使用Python的文件读取方法,如read(size)readline(),每次只读取一部分数据。
  2. 流处理(Streaming):如果数据可以按照某种顺序处理,你可以使用流处理,也就是一次处理一个数据项,然后丢弃它,再处理下一个。这种方式常常用于处理日志文件或网络流等。
  3. 使用内存映射文件:内存映射文件是一种将文件的一部分或全部映射到内存空间的技术,使得这部分文件能够像内存一样被访问。Python的mmap模块提供了这种功能。但需要注意的是,这种方法适用于随机访问文件,不适合顺序读取大文件。
  4. 使用分布式计算:如果数据非常大,而且不能在单机上处理,那么可以考虑使用分布式计算框架,如Hadoop或Spark,将数据分布在多个机器上进行处理。

十三、如何对列表中的元素进行去重?

在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)或字典的键。但我们可以通过一些其他的方法来去重。

  1. 使用json序列化:我们可以先将字典转化为JSON字符串,然后添加到集合(set)中,因为集合会自动去重。然后再将去重后的JSON字符串转回字典。
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)

  1. 使用元组作为键
# 列表中的元素是字典
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模块提供了正则表达式相关的操作。
以下是一些基本的正则表达式的使用方法:

  1. 查找匹配的字符串:**re.search()**函数会在字符串中搜索匹配正则表达式的第一个位置,并返回一个匹配对象,如果没有找到匹配的则返回None。
import re

result = re.search('Python', 'I love Python')
if result:
    print("Match found")
else:
    print("Match not found")

  1. 查找所有匹配的字符串:**re.findall()**函数会返回一个列表,包含字符串中所有匹配正则表达式的部分。
import re

result = re.findall('a', 'I am a Python developer')
print(result)  # 输出:['a', 'a', 'a']

  1. 替换匹配的字符串:**re.sub()**函数会将字符串中匹配正则表达式的部分替换为指定的字符串。
import re

result = re.sub('Python', 'Java', 'I am a Python developer')
print(result)  # 输出:'I am a Java developer'

  1. 分割字符串:**re.split()**函数可以按照正则表达式匹配的部分来分割字符串。
import re

result = re.split('\s', 'I am a Python developer')
print(result)  # 输出:['I', 'am', 'a', 'Python', 'developer']

  1. 编译正则表达式:如果你有一个正则表达式需要重复使用,那么可以使用**re.compile()**来提前编译这个正则表达式,这样可以提高效率。
import re

pattern = re.compile('Python')
result = pattern.search('I love Python')
print(result.group())  # 输出:'Python'

以上都是一些基本的用法,实际上正则表达式的功能远不止于此,它有很多的匹配模式和特殊序列可以用于处理复杂的字符串匹配和操作。

关注我,后续题目不断更新中文章来源地址https://www.toymoban.com/news/detail-487158.html

到了这里,关于Python面试高频100题【11~15题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《对线面试官》| 高频 Python 面试题 pt.1

    1.聊聊 python 中的值传递和引用传递吧 值传递: 值传递意味着在函数调用时,将实际参数的值复制一份传递给函数的形式参数 在函数内部,形式参数将作为局部变量使用,对形式参数的修改不会影响原始变量的值 引用传递 引用传递意味着在函数调用时,将实际参数的引用(

    2024年02月17日
    浏览(45)
  • Python高频面试题——如何实现列表去重

      在招聘Python自动化测试岗位面试时,最常问的一个编码实战问题就是: 一个包含多个值的列表,但存在重复值,如何实现去重?当然大家也可以结合实际业务情况进行提问,例如:统计今天有多少个不同的用户使用了系统等等,这样更能看出被面试的同学是不是在背题目

    2024年02月16日
    浏览(35)
  • 软件测试高频面试题(2023全新版)你必须掌握的面试技巧,包含HR面试、基础面试、JMeter面试、Postman面试、Python面试、自动化化面试、安全性能面试题

    1.1 面试技巧 💡 告诫给位小伙伴,技巧不是投机取巧,起到辅助作用,技术面主要看实力,这里是基于实力之上的技巧 1.2 面试形式 😄 面试形式分为技术面和 HR 面,技术面就是考察你的专业技术水平的,HR 面主要看你这个人的综合素质以及家庭情况符不符合公司要求(一般

    2024年02月11日
    浏览(48)
  • 【100天精通python】Day15:python 第三方模块和包,模块如何以主程序形式执行

    目录 1 常用的第三方模块 2. 第三方模块的安装和使用 2.1 安装第三方模块:

    2024年02月15日
    浏览(49)
  • Python 潮流周刊第 11 期(2023-07-15)

    查看全文:Python潮流周刊#11:如何使用 Golang 运行 Python 代码? 1、使用 Golang 和 Docker 运行 Python 代码 2、答案在代码中:“实现需求”的双重含义 3、减轻 Python 包管理的痛苦 (英) 4、CuPy:将 NumPy 数组调度到 GPU 上运行 5、Python 源码剖析:深度探索 Cpython 对象 6、使用 Flask + F

    2024年02月16日
    浏览(34)
  • Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()正确使用方法!

    关于python删除字符串是面试python测试开发工程师的一个经典问题。问题很简单,但是一下子就能测试出来被面试者是否能够熟练的进行python相关编码工作! 对于有些临时抱佛脚的同学来讲,一看删除,很自然就说用remove 、del相关方法,听到这里,就知道面试者根本不知道这

    2024年02月08日
    浏览(47)
  • ChatGPT实战100例 - (11) 零成本学习Python

    用ChatGPT列一个培训大纲, 然后:哪里不会点哪里! 问题: 回答

    2024年02月06日
    浏览(36)
  • 100+Python挑战性编程练习系列 -- day 11

    Question 38 对于给定的元组(1,2,3,4,5,6,7,8,9,10),编写一个程序,在一行中打印前半部分值,在一行中打印后半部分值。 方法1: 方法2: 方法3: Question 39 编写一个程序来生成并打印另一个元组,其值是给定元组中的偶数(1,2,3,4,5,6,7,8,9,10)。 Questi

    2024年02月04日
    浏览(57)
  • 【LeetCode高频100题-3】冲冲冲(持续更新23.2.1)

    一道数学题,排列组合/小学奥赛题。 动态规划不是一般来解决最值问题的吗,这道题为什么会想到dp? 从左上角到右下角,一共要走m+n-2步,其中向右n-1步,向下m-1步,因此路径的总数,相当于从m+n-2中选择m-1个向下的步数,即排列组合。 但是,需要注意的是,题目只保证最

    2023年04月19日
    浏览(33)
  • Java入门高频考查基础知识9(银盛15问万字参考答案)

    JAVA刷题专栏: 目录 一、Springcloud的工作原理 三、注册中心心跳是几秒 四、消费者是如何发现服务提供者的 五、多个消费者调⽤用同⼀接口,eruka默认的分配⽅式是什么 六、springboot常用注解,及其实现 七、spring的事务注解是什么?什么情况下事物才会回滚 八、spring事物的

    2024年02月20日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包