我是靠谱客的博主 细腻便当,最近开发中收集的这篇文章主要介绍集合序列函数习题一、集合二、序列三、函数与Lambda表达式总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、集合
    • tips?
    • 习题
  • 二、序列
    • tip
    • 习题
  • 三、函数与Lambda表达式
    • tips
      • 函数参数
      • 变量作用域
    • 习题
  • 总结


一、集合

tips?

num = {}
print(type(num))  # <class 'dict'>
num = {1, 2, 3, 4}
print(type(num))  # <class 'set'>

basket = set()    # 创建一个空的集合。

注意创建一个空的集合不能直接令一个变量等于{},需要令他等于set(),一定要注意,犯错!!!


lst = [0, 1, 2, 3, 4, 5, 5, 3, 1]

temp = []
for item in lst:
    if item not in temp:
        temp.append(item)

print(temp)  # [0, 1, 2, 3, 4, 5]

a = set(lst)
print(list(a))  # [0, 1, 2, 3, 4, 5]

从结果发现集合的两个特点:无序 (unordered) 和唯一 (unique)。

由于 set 存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判断一个元素是否在集合中。

这里的无序,指的是集合中的数字不能通过索引不能找到集合中的数。排序是不定的哦。
唯一性:可以通过强制转换将列表等序列内的值通过集合滤去重复的值。


可以使用for把集合中的数据一个个读取出来。

s = set(['Google', 'Baidu', 'Taobao'])
for item in s:
    print(item)

# Baidu
# Google
# Taobao

set.update(set)用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

x = {"apple", "banana", "cherry"}
y = {"google", "baidu", "apple"}
x.update(y)
print(x)
# {'cherry', 'banana', 'apple', 'google', 'baidu'}

set.discard(value) 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

fruits = {"apple", "banana", "cherry"}
fruits.discard("banana")
print(fruits)  # {'apple', 'cherry'}

set.pop() 用于随机移除一个元素。

fruits = {"apple", "banana", "cherry"}
x = fruits.pop()
print(fruits)  # {'cherry', 'apple'}
print(x)  # banana

习题

1、怎么表示只包含一个数字1的元组。

答:先将元组转换成集合,再将集合转换成元组。

i = (0, 1, 2, 2, 1, 3)
j = set(i)
i = tuple(j)
print(i)                 # (0, 1, 2, 3)       

2、创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。

答:先用set函数创建一个空集合,切记不能直接将{}赋值给变量哦。然后再将这个集合更新到空集合里面。

a = set()
b = {'x','y', 'z'}
a.update(b)
print(a)          # {'z', 'x', 'y'}

3、列表[‘A’, ‘B’, ‘A’, ‘B’]去重。
答:先将列表转换成集合,后再转换成列表。

c = set(['A', 'B', 'A', 'B'])
print(list(c))                   # ['B', 'A']

4、求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。

答:因为输出的是两个集合不重复的元素,使用差集函数的话,只能输出其中一个集合的不重复元素,所以我选用了求异或函数实现题目。

d = {6 ,7, 8}
e = {7, 8, 9}
f = d.symmetric_difference(e)
print(f)                        # {9, 6}

5、求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。

答:输出第一个集合在第二个集合中出现的次数,则:

g = {'A', 'B', 'C'}
h = {'B', 'C', 'D'}
for item in g:
    if item in h:
        print("%s : 1" %item, end=' ')
    else:
        print("%s : 0" %item, end= ' ')       # C : 1 B : 1 A : 0

二、序列

tip

sorted(iterable, key=None, reverse=False) 对所有可迭代的对象进行排序操作
①iterable值可迭代对象,比如列表,字符串,元组
②key=None,key的默认值是None,key是什么呢?key 参数是指定用来比较排序的参数,可以自定义排序规则(启发:自定义排序规则 --> 自定义函数 --> lambda表达式)
③reverse 参数指定以升序(False,默认)还是降序(True)进行排序

x = [-8, 99, 3, 7, 83]
print(sorted(x))  # [-8, 3, 7, 83, 99]
print(sorted(x, reverse=True))  # [99, 83, 7, 3, -8]

t = ({"age": 20, "name": "a"}, {"age": 25, "name": "b"}, {"age": 10, "name": "c"})
x = sorted(t, key=lambda a: a["age"])
print(x)
# [{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]
  • 乌拉

习题

1、怎么找出序列中的最大、最小值?

答:使用max()min()函数找到序列中的最大、最小值。

print(max([-8, 99, 3, 7, 83]))  # 99
print(min([-8, 99, 3, 7, 83]))  # -8

2、sort() 和 sorted() 区别

答:sort() 函数只对列表进行排序,sorted() 对所有可迭代的对象进行排序操作

x = [123, 456, 789, 213]
x.sort()
print(x)
# [123, 213, 456, 789]



t = ({"age": 20, "name": "a"}, {"age": 25, "name": "b"}, {"age": 10, "name": "c"})
x = sorted(t, key=lambda a: a["age"])
print(x)
# [{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]

3、怎么快速求 1 到 100 所有整数相加之和?

答:

print(sum(range(0, 101)))   # 5050

4、求列表 [2,3,4,5] 中每个元素的立方根。

答:

d = [2, 3, 4, 5]
e = [i ** 3 for i in d]
print(e)                   #[8, 27, 64, 125]

5、将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式。

答:用zip()函数对两个列表进行打包处理。

f = ['x', 'y', 'z']
g = [1, 2, 3]
z = zip(f, g)
print(list(z))         #[('x', 1), ('y', 2), ('z', 3)]

三、函数与Lambda表达式

tips

函数参数

Python 的函数具有非常灵活多样的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。从简到繁的参数形态如下:

  • 位置参数 (positional argument)
  • 默认参数 (default argument)
  • 可变参数 (variable argument)
  • 关键字参数 (keyword argument)
  • 命名关键字参数 (name keyword argument)
  • 参数组合

1. 位置参数

def functionname(arg1):
    "函数_文档字符串"
    function_suite
    return [expression]
  • arg1 - 位置参数 ,这些参数在调用函数 (call function) 时位置要固定。

2. 默认参数

def functionname(arg1, arg2=v):
    "函数_文档字符串"
    function_suite
    return [expression]
  • arg2 = v - 默认参数 = 默认值,调用函数时,默认参数的值如果没有传入,则被认为是默认值。
  • 默认参数一定要放在位置参数 后面,不然程序会报错。

【例子】

def printinfo(name, age=8):
    print('Name:{0},Age:{1}'.format(name, age))


printinfo('小马')  # Name:小马,Age:8
printinfo('小马', 10)  # Name:小马,Age:10
  • Python 允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

【例子】

def printinfo(name, age):
    print('Name:{0},Age:{1}'.format(name, age))


printinfo(age=8, name='小马')  # Name:小马,Age:8

3. 可变参数

顾名思义,可变参数就是传入的参数个数是可变的,可以是 0, 1, 2 到任意个,是不定长的参数。

def functionname(arg1, arg2=v, *args):
    "函数_文档字符串"
    function_suite
    return [expression]
  • *args - 可变参数,可以是从零个到任意个,自动组装成元组
  • 加了星号(*)的变量名会存放所有未命名的变量参数。

【例子】

def printinfo(arg1, *args):
    print(arg1)
    for var in args:
        print(var)


printinfo(10)  # 10
printinfo(70, 60, 50)

# 70
# 60    这两个存再*args里面组成元组
# 50

4. 关键字参数

def functionname(arg1, arg2=v, *args, **kw):
    "函数_文档字符串"
    function_suite
    return [expression]
  • **kw - 关键字参数,可以是从零个到任意个,自动组装成字典

【例子】

def printinfo(arg1, *args, **kwargs):
    print(arg1)
    print(args)
    print(kwargs)


printinfo(70, 60, 50)
# 70
# (60, 50)
# {}
printinfo(70, 60, 50, a=1, b=2)
# 70
# (60, 50)
# {'a': 1, 'b': 2}

「可变参数」和「关键字参数」的同异总结如下:

  • 可变参数允许传入零个到任意个参数,它们在函数调用时自动组装为一个元组 (tuple)
  • 关键字参数允许传入零个到任意个参数,它们在函数内部自动组装为一个字典 (dict)

5. 命名关键字参数

def functionname(arg1, arg2=v, *args, *, nkw, **kw):
    "函数_文档字符串"
    function_suite
    return [expression]
  • *, nkw - 命名关键字参数,用户想要输入的关键字参数,定义方式是在nkw 前面加个分隔符 *。
  • 如果要限制关键字参数的名字,就可以用「命名关键字参数」
  • 使用命名关键字参数时,要特别注意不能缺少参数名。

【例子】

def printinfo(arg1, *, nkw, **kwargs):
    print(arg1)
    print(nkw)
    print(kwargs)


printinfo(70, nkw=10, a=1, b=2)
# 70
# 10
# {'a': 1, 'b': 2}

printinfo(70, 10, a=1, b=2)     #命名关键字参数时前面一定要加上参数’名称=‘,不然会报错(不一定是nkw)

# TypeError: printinfo() takes 1 positional argument but 2 were given
  • 没有写参数名nwk,因此 10 被当成「位置参数」,而原函数只有 1 个位置函数,现在调用了 2 个,因此程序会报错。

6. 参数组合

在 Python 中定义函数,可以用位置参数、默认参数、可变参数、命名关键字参数和关键字参数,这 5 种参数中的 4 个都可以一起使用,但是注意,参数定义的顺序必须是:

  • 位置参数、默认参数、可变参数和关键字参数。
  • 位置参数、默认参数、命名关键字参数和关键字参数。 反正字典要放在最后就是了。

要注意定义可变参数和关键字参数的语法:

  • *args 是可变参数,args 接收的是一个 tuple
  • **kw 是关键字参数,kw 接收的是一个 dict

命名关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。定义命名关键字参数不要忘了写分隔符 *,否则定义的是位置参数。

警告:虽然可以组合多达 5 种参数,但不要同时使用太多的组合,否则函数很难懂。

变量作用域

  • Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
  • 定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
  • 定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
  • 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

【例子】

def discounts(price, rate):
    final_price = price * rate
    return final_price


old_price = float(input('请输入原价:'))  # 98
rate = float(input('请输入折扣率:'))  # 0.9
new_price = discounts(old_price, rate)
print('打折后价格是:%.2f' % new_price)  # 88.20
  • 内部作用域想修改外部作用域的变量时,就要用到globalnonlocal关键字了。

这里的nonlocal是怎么用的?

局部作用域:内层函数对外层函数的局部变量进行修改
就是说两个函数嵌套的时候,里面的那个函数使用nonlocal可以调用外面函数的变量值❤
而不是只有一个函数,从这个函数里面对全局变量进行修改。。❤❤


闭包和递归到底是什么,我们可以查看这位大神所给出的解释。还有看一送一的lambda表达式哦。
https://blog.csdn.net/weixin_51503843/article/details/109231048


习题

1、怎么给函数编写文档?

答:在函数中双引号""为注释,#井号也为注释,但当使用.__doc__打印出此函数时,只有双引号内的内容被打印出来,井号的

def MyFirstFunction(name):
    "函数定义过程中name是形参"
    # 因为Ta只是一个形式,表示占据一个参数位置


print(MyFirstFunction.__doc__)
# 函数定义过程中name是形参

2、怎么给函数参数和返回值注解?

答: x: int , y: int 说明了输入的两个参数都是int , -> int 说明返回值也是int 。

def func(x: int, y: int) -> int:
	return x+y


3、闭包中,怎么对数字、字符串、元组等不可变元素更新。

答:如果要修改闭包作用域中的变量则需要 nonlocal 关键字。

def outer():
    num = 10

    def inner():
        nonlocal num  # nonlocal关键字声明
        num = 100
        print(num)

    inner()
    print(num)


outer()

# 100
# 100

4、分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)

答:此处我们需要用到排序的sorted()函数对二维列表a进行排序。

a = [[6, 5], [3, 7], [2, 8]]
print(sorted(a, key = lambda a: a[0]))

5、利用python解决汉诺塔问题?
有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)

答:想不出来,所以贴了别人的代码:

def hannuota(num, a, b, c):
    if num == 1:  # 如果只有一片
        print(a, '-->', c)  # 那就直接把它从a柱移动c柱
    else:  # 两片以上的话
        hannuota(num-1, a, c, b)  # 先把 num-1 片移到b柱
        print(a, '-->', c)  # 在把最底层的那片移到c柱
        hannuota(num-1, b, a, c)  # 接下来就是想办法把b柱上面的移到c柱了


num = int(input('请输入片数:'))  # 片数由我们来自己手动输入
hannuota(num, 'a', 'b', 'c')  # 在此调用函数,柱子a,b,c就默认使用形参吧

总结

。冲冲冲。

最后

以上就是细腻便当为你收集整理的集合序列函数习题一、集合二、序列三、函数与Lambda表达式总结的全部内容,希望文章能够帮你解决集合序列函数习题一、集合二、序列三、函数与Lambda表达式总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部