【python面试170题】5. 数据类型-综合 - Go语言中文社区

【python面试170题】5. 数据类型-综合


【面试题目来着微信公众号:GitChat】

综合

41.Python 常用的数据结构的类型及其特性?
在这里插入图片描述
42.如何交换字典 {“A”:1,“B”:2}的键和值?

def test20():
    a = {"A": 1, "B": 2}
    # 用字典生成式交换键和值
    b = {v: k for k,v in a.items()}
    print(b)

43.Python 里面如何实现 tuple 和 list 的转换?

def test21():
    # 可以强制转换元组和列表
    l = [1, 2, 3, 4, 5, 6]
    t = ("a", "b", "c")
    print(tuple(l))
    print(list(t))

44.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
首先生成器直接做切片是会报错的,
在这里插入图片描述
我想到了两种方法,切片生成器:将生成器自己转化为列表切片,或者用itertools.islice()方法。需要注意生成器的特性:每次进行迭代时返回一个值,直到遇到StopIteration异常结束

import itertools
# islice(iterable, stop) --> islice object
# islice(iterable, start, stop[, step]) --> islice object
def test22():
    a = (i for i in range(0, 6))
    # 1. 自己将生成式转换为列表,再切片,等于先将所有元素都生成了出来
    print("相转化为列表再切片: %s" % list(a))

    # 2. 使用itertools中的islice方法进行切片,注意生成器中的元素是抛出,抛出一个少一个
    a = (i for i in range(0, 6))
    print("取前两个元素: %s" % list(itertools.islice(a, 2)))
    print("取前两个元素: %s" % list(itertools.islice(a, 2)))
    print("取前两个元素: %s" % list(itertools.islice(a, 2)))

    a = (i for i in range(0, 6))
    print(list(itertools.islice(a, 0, 4)))
    
test22()
输出结果:
相转化为列表再切片: [0, 1, 2, 3, 4, 5]
取前两个元素: [0, 1]
取前两个元素: [2, 3]
取前两个元素: [4, 5]
[0, 1, 2, 3]

45.请将[i for i in range(3)]改成生成器

(i for i in range(3))

46.a="hello"和 b="你好"编码成 bytes 类型

def test23():
    a = "hello"
    b = "你好"
    # 1. 用betes和str直接转换
    c = bytes(a, "utf-8")
    print("c:", c, type(c))
    d = bytes(b, "utf-8")
    print("d:", d, type(d))
    # 2. 用encode方法转换
    e = a.encode("utf-8")
    print("e:", e, type(e))
    f = b.encode("utf-8")
    print("f:", f, type(f))

test23()
输出:
c: b'hello' <class 'bytes'>
d: b'xe4xbdxa0xe5xa5xbd' <class 'bytes'>
e: b'hello' <class 'bytes'>
f: b'xe4xbdxa0xe5xa5xbd' <class 'bytes'>

47.下面的代码输出结果是什么?
在这里插入图片描述
代码会抛出异常,元组是不可变类型,修改的这个元素的值是不可变类型,修改这个元素的值,会改变指向的内存地址,故不能修改.

Traceback (most recent call last):
  File "H:/project/test_for_offer/main/test_for_offer.py", line 286, in <module>
    test24()
  File "H:/project/test_for_offer/main/test_for_offer.py", line 283, in test24
    a[2] = 2
TypeError: 'tuple' object does not support item assignment

48.下面的代码输出的结果是什么?
在这里插入图片描述
元组中的元素是可变类型的话,修改这个元素的值,元素指向的内存地址是不会变的,所以可以修改.

输出:
(1, 2, 3, [2, 5, 6, 7], 8)

面试题目来着微信公众号:GitChat
Python 爬虫面试题 170 道
以上答案皆为鄙人回答,如有问题,敬请诸君指出.
【python面试170题】系列
1. 语言特性
2. 编码规范
3. 数据类型-字符串
4. 数据类型-列表、字典
5. 数据类型-综合

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43097012/article/details/97616748
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:37:10
  • 阅读 ( 809 )
  • 分类:面试题

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢