python result 转换列表_2020年Python最新面试题(二):Python基础

目录

  • 1. 上期真题答案
  • 2. 如何删除一个列表(list)中的重复元素
  • 3. 如何求两个列表(list)的交集、差集或并集?
  • 4. 如何反序地迭代一个序列?
  • 5. 列表的sort方法和sorted方法有何区别?
  • 6. 列表中常用的方法有哪些?
  • 7. 什么是列表生成式?
  • 8. 字符串格式化%和.format,f格式化字符串的区别是什么?
  • 9. 单引号、双引号和三引号的区别有哪些?
  • 10. Python 中常用字符串方法有哪些?
  • 11. 如何判断一个字符串是否全为数字?
  • 12. Python 字典有哪些内置函数?
  • 13. 字典的items()方法和iteritems()方法有什么不同?
  • 14. 集合常见内置方法有哪些?
  • 15. 真题

喜欢编程的小伙伴可以加小编的Q群867067945,进群可以领取免费的学习资料哦!群里都是想学习编程的小伙伴哦

1. 上期真题答案

  1. “1 or 2”、“1 and 2”、“1 < (2==2)”、“1 < 2==2” 分别输出什么? 1 2 False True
  2. 以下代码的运行结果是什么? “A”
value = "B" and "A" or "C"print(value)12
  1. 用4、9、2、7 四个数字,可以使用+、-、*、和/,每个数字使用一次,使表达式的结果为24,表达式是什么? ==> (9+7-4)*2
  2. any()和all()方法有什么区别? any()只要迭代器中有一个元素为真就为真,all()要求迭代器中所有的判断项返回都是真,结果才为真。
  3. Python 中有什么元素为假? 0 空字符串、空列表、空字典、空元组、None、False都表示假。
  4. 在 Python 中是否有三元运算符 “?:” ? 没有 min = a if a
  5. 如何声明多个变量并赋值? a,b,c=3,4,5 a=b=c=3
以下程序是否会报错 V3会报错,因为字典元素的键不能为可变对象
v1 = {}v2 = {3:5}v3 = {[11,23]:5}v4 = {(11,23):5}1234
  1. a = (1,),b = (1),c = (“1”) 分别是什么类型的数据? a 为元组,b为整型,c为字符串,可以使用type函数来验证。
  2. 使用 for 循环分别遍历列表、元组、字典和集合。(简单)
  3. 99的八进制表示是多少。print(oct(99)) ==> 0o143
  4. 请写出十进制转二进制、八进制、十六进制的程序。# 获取输入十进制数 dec = int(input("输入数字: ")) print("十进制为: ", dec) print("转换为二进制为: ", bin(dec)) print("转换为八进制为: ", oct(dec)) print("转换为十进制为: ", hex(dec)) 123456

2. 如何删除一个列表(list)中的重复元素

删除列表中重复的元素有多种方式,下面介绍五种删除的方法。

方法一:使用集合 (set) 的方式

elements = ["a", "a", "b", "c", "c", "b", "d"]e = list(set(elements))print(e)123

这种方法利用 set 中的元素不可重复的特性去重。除此之外,如果要保持列表元素的原来顺序,那么可以利用 list 类的 sort 方法:

elements = ["a", "a", "b", "c", "c", "b", "d"]e = list(set(elements))e.sort(key=elements.index)print(e)  # ['a', 'b', 'c', 'd']1234

方法二:使用字典的方式,利用字典 key 的唯一性

# 使用字典的方式,利用字典 key 的唯一性elements = ["a", "a", "b", "c", "c", "b", "d"]# e = list({}.fromkeys(elements))e = list({}.fromkeys(elements).keys())print(e)  # ['a', 'b', 'c', 'd']12345

喜欢编程的小伙伴可以加小编的Q群867067945,进群可以领取免费的学习资料哦!群里都是想学习编程的小伙伴哦

这种方法利用字典的键值不能重复的特性来去重。其中,Python 函数 dict.fromkeys(seq[.value]) 用于创建一个新字典,以序列 seq 中元素做字典的值,value 为字典所有键对应的初始值,如下所示:

46b235f460ee57cb2ae9cdbd4792cc1e.png


方法三:列表推导的方式

elements = ["a", "a", "b", "c", "c", "b", "d"]e = []for i in elements:    if i not in e:        e.append(i)print(e)123456

方法四:count计数

elements = ["a", "a", "b", "c", "c", "b", "d"]n = 0while n < len(elements):    if elements.count(elements[n]) > 1:        elements.remove(elements[n])        continue    n += 1print(elements)  # ['a', 'c', 'b', 'd']12345678

方法五:reduce 函数

from functools import reduceelements = ["a", "a", "b", "c", "c", "b", "d"]v = reduce(lambda x, y: x if y in x else x + [y], [[]] + elements)print(v)  # ['a', 'b', 'c', 'd']12345

3. 如何求两个列表(list)的交集、差集或并集?

求两个列表(list)的交集、差集或并集,最容易想到的方法就是用 for 循环来实现,如下所示:

a = [1, 2, 3, 4, 5]b = [2, 4, 5, 6, 7]# 交集result = [r for r in a if r in b]print(f"a与b的交集: {result}")  # a与b的交集: [2, 4, 5]# 差集 在a中但不在b中result = [r for r in a if r not in b]print(f"a与b的差集: {result}")  # a与b的差集: [1, 3]# 并集result = afor r in b:    if r not in result:        result.append(r)print(f"a与b的并集: {result}")  # a与b的并集: [1, 2, 3, 4, 5, 6, 7]1234567891011121314

方法二:用 set 操作

a = [1, 2, 3, 4, 5]b = [2, 4, 5, 6, 7]# 交集result = list(set(a).intersection(set(b)))print(f"a与b的交集: ", result)  # a与b的交集:  [2, 4, 5]# 差集 在a中但不在b中result = list(set(a).difference(set(b)))print(f"a与b的差集: ", result)  # a与b的差集:  [1, 3]# 并集result = list(set(a).union(set(b)))print(f"a与b的并集: ", result)  # a与b的并集:  [1, 2, 3, 4, 5, 6, 7]123456789101112

4. 如何反序地迭代一个序列?

Python 中常见的序列有字符串、列表及元组。对序列反序,可以利用内置函数 reversed() 或 range() 来实现,也可以用扩展切片 [::-1] 的形式实现。如果这个序列是列表,那么还可以使用列表自带的 reverse()方法。

(1) reversed() 是 Python 内置的函数,它的参数可以是字符串、列表或元组等序列。
(2) 利用 range() 方法生成序列的反序索引,然后从最后的元素遍历到开始的元素,就可以反序输出序列的元素。range(start, end[,step]) 方法的参数说明:
start:计数从 start 开始。默认是从 0开始。
end:计数到 end 结束,但不包括 end。
step:步长,默认为 1。
(3) seq[::-1] 扩展切片方法是利用了序列的切片操作,切片是序列的高级特性。seq[::-1] 表示反向获取 seq 中的所有元素,并且每次取一个。-1 表示从序列的最后一个元素反向遍历获取。
(4) 如果是列表(list) 序列,那么还可以直接用列表的 reverse() 方法。示例代码如下:

seq = "Hello World"# reversed()内置函数方法for s in reversed(seq):    print(s, end="")print()  # 换行# range()函数方法for i in range(len(seq) - 1, -1, -1):    s = seq[i]    print(s, end="")print()# [::-1]扩展切片方法for s in seq[::-1]:    print(s, end="")print()# list 自带的 reverse()方法seq = [1, 2, 3, 4, 5, 6]seq.reverse()for s in seq:    print(s, end="")print()12345678910111213141516171819202122

5. 列表的sort方法和sorted方法有何区别?

Python 对列表的排序提供了两种方法,一种是自带的 sort(),另一种方法是内置方法 sorted。可以用内置函数 help() 来查看 sort()方法 和 sorted()方法的详细说明。

列表的 sort 方法和内置方法 sorted 都有 key 和 reverse 参数, key 参数接收一个函数来实现自定义的排序,例如key=abs 按绝对值大小排序。reverse 默认值是False,表示不需要反向排序,如果需要反向排序,那么可以将 reverse 的值设置为 True

sort 是列表方法,只可用来对列表进行排序,是在原序列上进行修改,不会产生新的序列。内置的 sorted 方法可以用于任何可迭代的对象 (字符串、列表、元组、字典等),它会产生一个新的序列,旧的对象依然存在。如果不需要旧的列表序列,那么可以采用 sort 方法。

# list的sort()方法对列表排序seq = [1, 3, 5, 4, 2, 6]print("原来的序列: ", seq)seq.sort()print("sort 排序后的序列: ", seq)# 内置 sorted()方法对列表排序seq = [1, 3, 5, 4, 2, 6]s = sorted(seq)print("原来的序列: ", seq)print("sort 排序后的序列: ", seq)print("sort 排序后的新序列: ", s)# 内置sorted()方法对字符串排序seq = "135426"s = sorted(seq)print("原来的序列: ", seq)print("sort 排序后的序列: ", seq)print("sort 排序后的新序列: ", s)1234567891011121314151617

运行结果如下图所示:

8a5f0bbb35da6e0862f07627aaa3a9e7.png

6. 列表中常用的方法有哪些?

以下是 Python 列表中常用的方法:

10f50754943cf15c95abe3defa9a284e.png

7. 什么是列表生成式?

用来创建列表 (list) 的表达式就是列表生成式,也被称为列表推导式,它相当于 for 循环的简写形式。列表生成式返回的是一个列表,它提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

每个列表生成式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,那么就必须使用括号。列表生成式的语法:[表达式 for 循环]

# 根据 range生成一个数字的平方的列表num_list = []for x in range(1, 11):    num_list.append(x * x)print(num_list)# 如果使用列表生成式,那么代码如下:num_list2 = [x * x for x in range(1, 11)]print(num_list2)# 针对偶数进行平方运算num_list3 = [x * x for x in range(1, 11) if x % 2 == 0]print(num_list3)1234567891011

8. 字符串格式化%和.format,f格式化字符串的区别是什么?

格式化字符串有两种方法:%和format,具体这两种方法有什么区别?请看以下解析。

a3a0c45ed36ef3bca937ebd2240a54e6.png


上面的代码在运行时会抛出一个如下的TypeError。

TypeError: not all arguments converted during string formatting1

像这类格式化的需求就需要写成下面的格式:

# 定义一个坐标值c = (250, 250)# 使用%格式化s1 = "坐标: %s" % (c,)# 使用 format 就不会存在上面的问题s2 = "坐标: {}".format(c)print(s2)  # 坐标: (250, 250)1234567

一般情况下,使用 % 已经足够满足程序的需求,但是像这种需要在一个位置添加元素或列表类型的代码,最好选择 format 方法。在 format 方法中,{} 表示占位符,如下所示:

# {}表示占位符print("{},爱老虎".format("zhangsan"))  # zhangsan,爱老虎print("{},{}爱老虎".format("王雷", "李梅"))  # 王雷,李梅爱老虎# 0表示第一个参数的位置print("{1},{0}爱老虎".format("李梅", "王雷"))  # 王雷,李梅爱老虎12345

Python 3.6 版本开始出现了此新的格式化字符串,f-string 格式化字符串,性能又优于前面两种方式。示例代码如下:

name = "testerzhang"print(f'Hello {name}.')print(f'Hello {name.upper()}.')d = {'id': 1, 'name': 'testerzhang'}print(f'User[{d["id"]}]: {d["name"]}')12345

9. 单引号、双引号和三引号的区别有哪些?

单引号和双引号是等效的,如果要换行,那么需要使用符号()。三引号则可以直接换行,并且可以包含注释,例如:

# 单引号括起来的字符串: 'hello'# 双引号括起来的字符串: "hello"# 三引号括起来的字符串: '''hello'''(三单引号), """hello"""(三双引号)123

需要注意的是:

  1. 三引号括起来的字符串可以直接进行换行。
  2. 单引号里面不能再加单引号,但是可以加 或者是双引号进行转义输出。
  3. 双引号里面不能再加双引号,但是可以加 或者是单引号进行转义输出。

如果要表示 "Let's go" 这个字符串,那么:

80a448b633dc16e1cf925f269dfc5c5b.png

10. Python 中常用字符串方法有哪些?

Python 中常用的字符串内置函数如下:

0e70d7f8dd0800480109ed5279e374df.png
9e03bc472f9a1e15f6ef7226d06e47b0.png

11. 如何判断一个字符串是否全为数字?

可以有以下几种办法来判断:

(1) Python isdigit() 方法检测字符串是否只由数字组成。

078af13f4082e5ab88aa347ebb30bf64.png


(2) Python isnumeric() 方法检测字符串是否只由数字组成。这种方法只针对 Unicode 字符串。如果想要定义一个字符串为 Unicode,那么只需要在字符串前添加 u 前缀即可。

ff0556db4d2438b8ebaf00d420db9d0d.png


(3) 自定义函数 is_number 来判断。

# -*- coding: UTF-8 -*-"""@author:AmoXiang@file:3.判断一个字符串是否全为数字.py@time:2020/11/10"""def is_number(s):    try:        float(s)  # 如果能运行float(s)语句,返回True(字符串s是浮点数、整数)        return True    except ValueError:        pass    try:        import unicodedata  # 处理ASCii码的包        unicodedata.numeric(s)  # 把一个表示数字的字符串转换为浮点数返回的函数        return True    except (TypeError, ValueError):        pass    return False# 测试字符串和数字print(is_number("foo"))  # Falseprint(is_number("1"))  # Trueprint(is_number("1.3"))  # Trueprint(is_number("-1.37"))  # Trueprint(is_number("1e3"))  # True12345678910111213141516171819202122232425262728293031

12. Python 字典有哪些内置函数?

Python 字典包含了以下内置函数:

aedc45052f83a1a56113ff4fca91abba.png


使用示例如下所示:

09969db332ac5d12f399a4fd9890296f.png

喜欢编程的小伙伴可以加小编的Q群867067945,进群可以领取免费的学习资料哦!群里都是想学习编程的小伙伴哦

13. 字典的items()方法和iteritems()方法有什么不同?

字典是 Python 语言中唯一的映射类型。映射类型对象里哈希键(键,key)和指向的对象(值,value)是多对一的关系,通常被认为是可变的哈希表。字典对象是可变的,它是一个容器类型,能存储任意个数的 Python 对象,其中也可包括其他容器类型。

字典是一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号 ( 分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如下所示:

d= {key1:value1, key2:value2}1

键必须是唯一的,但值则不必唯一。值可以取任何数据类型,但键必须是不可变的,例如字符串、数字或元组。

字典的 items 方法可以将所有的字典项以列表方式返回,因为字典是无序的,所以用 items 方法返回字典的所有项,也是无序的。

在 Python 2.x 中,items 会一次性取出所有的值,并以列表返回。iteritems 方法与 items 方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器,通过迭代取出里面的值,一般在数据量大的时候,iteritems 会比 items 效率高些。

需要注意的是,在 Python 2.x 中,iteritems() 用于返回本身字典列表的迭代器 (Returns an iterator on allitems(key/value pairs)),不占用额外的内存。但是,在Python 3.x中,iteritems() 方法已经被废除了,用 items() 替换 iteritems(),可以用于 for 来循环遍历。在 Python 3.x 中示例:

437751184c8dad27b36e5faa94382026.png


在 Python 2.x 中运行如下代码:

b564ff38f5bd7a671938d7445e325c1b.png

14. 集合常见内置方法有哪些?

集合常见的内置方法如下表所示:

be174f2e39a233b3515a936bb65b9f5b.png

15. 真题

  1. 两个 list 对象 aList = [“a”,“b”,“c”,“d”,“e”,“f”],blist = [“x”,“y”,“z”,“d”,“e”,“f”],请用简洁的方法合并这两个 list,并且 list 里面的元素不能重复,最终结果需要排序。
  2. 请将两个列表[1,5,7,9]和[2,2,6,8] 合并为 [1,2,2,5,6,7,8,9]
  3. 如何将一个字符串逆序输出?
  4. 给定 list 对象 al=[{“name”:“a”,“age”:20},{“name”:“b”,“age”:30},{“name”:“c”,“age”:25}],请按 al 中元素的 age 由大到小排序。
  5. List = [-2,1,3,-6] ,如何实现以绝对值大小从小到大将List中内容排序
  6. 给定字典dic = {“a”:3,“bc”:5,“c”:3,“asd”:4,“33”:56,“d”:0},分别按照升序和降序进行排序。
  7. 给定一个嵌套列表 list2=[[1,2],[4,6],[3,1]],请分别按照嵌套列表中的子列表的第1个和第2个元素进行升序排序
  8. 使用 lambda 函数对 list 排序 foo=[-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为 [0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小
  9. 现有字典 d= {“a”:24,“g”:52,“i”:12,“k”:33},请按字典中的 value值进行排序。
  10. 现有列表 foo = [[“zs”,19],[“ll”,54],[“wa”,23],[“df”,23],[“xf”,23]],列表嵌套列表排序,如果年龄相同,那么就按照字母排序。

喜欢编程的小伙伴可以加小编的Q群867067945,进群可以领取免费的学习资料哦!群里都是想学习编程的小伙伴哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值