2023.10.8-python学习,数据容器习题,函数类型

一.数据容器

1.序列删除元素操作remove

'''
给定一个列表,首先删除以s开头的元素,

删除后,修改第一个元素为"joke",

并且把最后一个元素复制一份,放在joke的后边
'''
my_list = ["spring", "strange", "look",
           "curious", "black", "hope"]
# 删除以s开头的元素
for i in my_list[:]:
    if i[0] == 's':
        my_list.remove(i)
print(my_list)

for i in my_list:
    if i.startswith('s'):
        my_list.remove(i)
print(my_list)

'''按照索引来删除remove,但remove移除后索引都会变,会有遗漏的移除项,
如果把两个s开头的字母放在前两个位置,只会移除第一个单词
,第二个不会,因为for循环记录的是原本的索引位置,不判断已经进行过判断的索引位置
在要循环的列表后面加一个[:],表示每次循环都从头判断到尾
'''

 2.序列删除元素操作startwith

print('---------------------------------------------')
my_list = ["spring", "strange", "look",
           "curious", "black", "hope"]
i = 0
while i < len(my_list):
    if my_list[i].startswith('s'):
        my_list.remove(my_list[i])
    i += 1
print(my_list)
# ['strange', 'look', 'curious', 'black', 'hope']
print('---------------------------------------------')

 3.往字典添加键值对

d1 = {}
d1[5] = 10
d1[6] = 11
d1['5'] = 12
d1[5.0] = 13
print(d1)
# key重复,后面新增的value直接替换原先的,5.0被认为等于5

 {5: 13, 6: 11, '5': 12}

 4.容器通用操作,len,max,min,sored,reverse,enumerate

list_1 = ['d', 'a', 'b', 'c', 'e']
tuple_1 = ('d', 'a', 'b', 'c', 'e')
str_1 = 'abcde'
set_1 = {'d', 'a', 'b', 'c', 'e'}
dict_1 = {'d': 1, 'a': 1, 'b': 1, 'c': 1, 'e': 1}

print('-----------求长度---------------')
print(len(list_1))  #5
print('-----------求最大---------------')
print(max(list_1))  # e
print('-----------求最小---------------')
print(min(list_1))  # a
print(min(dict_1))  # a
print('-----------排序---------------')
print(sorted(list_1))  #['a', 'b', 'c', 'd', 'e']
print(sorted(set_1))  # ['a', 'b', 'c', 'd', 'e']
# ['a', 'b', 'c', 'd', 'e'],默认从小到大排序,并放到列表中
print('-----------翻转---------------')
print(sorted(list_1))  # ['a', 'b', 'c', 'd', 'e']

print(sorted(list_1, reverse=False))  # 默认从小到大,假的反转
# ['a', 'b', 'c', 'd', 'e']
print(sorted(list_1, reverse=True))  # 默认从小到大,真的反转
# ['e', 'd', 'c', 'b', 'a']

print('-----------枚举---------------')
for i, e in enumerate(list_1):
    print(i, e)
'''
0 d
1 a
2 b
3 c
4 e
'''

print('--------------枚举循环----------------')
sum = 0
num = 0
for i in range(101):  # 0,101(不包含101),1
    sum = num + sum
    num += 1
    a = (sum, num)
for q, e in enumerate(a):
    print(q, e)
'''
0 5050
1 101
'''

5.容器强转换类型,eval去引号

print('----------容器强转换类型-----------------')
# 利用集合的去重特点来去重
list_5 = [1, 2, 3, 4, 5, 4, 3, 2, 1]
set_2 = set(list_5)
print(set_2)
# {1, 2, 3, 4, 5}

list_2 = ['d', 'a', 'b', 'c', 'e']
tuple_1 = ('d', 'a', 'b', 'c', 'e')
str_1 = 'abcde'
set_1 = {'d', 'a', 'b', 'c', 'e'}
dict_1 = {'d': 1, 'a': 1, 'b': 1, 'c': 1, 'e': 1}

s1 = str(list_2)
print(s1)
# 把列表转换为字符串['d', 'a', 'b', 'c', 'e']

s2 = list(s1)
print(s2)
'''把列表转为字符串后,再把这个字符串转回列表,
会把所有的字符都当成列表里的元素,从而数据错乱,
比如['[', "'", 'd', "'", ',', ' ', "'", 'a', "'"
'''

print(eval(s1), type(list_2))
# ['d', 'a', 'b', 'c', 'e'] <class 'list'>
'''用eval函数去掉引号要注意,会把普通的字符串的引号也去掉,变得啥也不是
比如print(eval('白')),也容易把原本的字符串类型转换成其他的数据类型'''
print(eval('3.14'), type(eval('3.14')))
# 字符串去掉了引号变成浮点数类型
print(eval('True'), type(eval('True')))
# 字符串去掉了引号变成了布尔类型
print(eval('10'), type(eval('10')))
# 字符串去掉了引号变成了整数类型

6.三大序列通用符号 

+ : 通用拼接符号 ,产生新的序列

* : 通用复制拼接符号,产生新的序列

# 定义列表
list1 = ['d', 'a', 'b', 'c', 'e']
# 定义元组
tuple1 = ('d', 'a', 'b', 'c', 'e')
# 定义字符串
str1 = 'dabce'


# 演示通用拼接符号:+  产生新的序列
print(list1 + ['f'])
print(tuple1 + ('f',))
print(str1 + 'f')

# 演示通用复制拼接符号: * 产生新的序列
print(list1 * 3)
print(tuple1 * 3)
print(str1 * 3)

7.给变量赋值

'''两个变量交换值,把a和b的值交换'''
a = 10
b = 20
print(a, b)  # 10,20
temp = a  # 把10给t
a = b  # 把20给a
b = temp  # 把t10 给b 
print(a, b)

a = 10
b = 20
b, a = a, b
print(a, b)  # 20 10

 二.函数

 1.函数多个返回值

#  先定义函数
def show():
    return 1, 2, 3


# 函数返回多个值,核心思想是放到容器中返回,默认用的元组

# 再调用函数
result = show()
print(result, type(result))
# 接收后的result ,被变成了元组,把他拆出来,可以用循环
for i in result:
    print(i)
# 定义n个值来接收拆包后的元组里的元素
a, b, c = show()
print(a, b, c)

 2.位置参数

print('--------------位置参数----------------------')


def user_info(name, age, gender):
    print(f'您的名字是{name},年龄是{age},性别是{gender}')


# 位置参数,调用函数时根据函数定义的参数位置来传递参数
user_info('白', 20, '男')  # 您的名字是白,年龄是20,性别是男
user_info('黒', 30, '女')  # 您的名字是黒,年龄是30,性别是女

 3.关键字参数

print('--------------关键字传参----------------------')


def user_info(name, age, gender):
    print(f'您的名字是:{name},年龄是:{age},性别是:{gender}')


# 关键字参数,函数调用时通过“键=值”形式传递参数
user_info(name='张三', age='19', gender='男')

# 顺序可以打乱
user_info(gender='男', name='张三', age='19')
# 函数调用时,如果有位置参数时,
# 位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
user_info('张三', '19', gender='男')


def keyword(name, sex, hobby):
    print(f'您的名字是{name},您的性别是{sex},您的爱好是{hobby}')


keyword(name='白', sex='男', hobby='运动')


def keyworld(a, b, c):
    d = (a + b) / c
    e = (a * b) + c
    return d, e


f = keyworld(c=1, a=20, b=10)
print(f)

 4.缺省参数

 调用的时候叫关键字参数,定义的时候叫缺省参数,

如果设置的时候都设置了缺省参数,调用的时候只想改变后面的某个数据,需要用关键字参数

print('----------------缺省参数-----------------------')


# 缺省参数:缺省参数也叫默认参数,用于定义函数,解决了实参和形参数量不一致的问题,
# 为参数提供默认值,调用函数时可不传该默认参数的值
# (注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).

def user_info(name, age, gender='男'):
    # 如果调用的函数没有输入性别,就默认是男的
    print(f'您的名字是:{name},年龄是:{age},性别是:{gender}')


user_info('张三', 20)  # 您的名字是:张三,年龄是:20,性别是:男
user_info('王五', 20, '女')  # 您的名字是:王五,年龄是:20,性别是:女


def keyw(name, sex='男', hobby='打篮球'):
    print(f'您的名字是{name},您的性别是{sex},您的爱好是{hobby}')


keyw(name='白', sex='男')
keyw('黑', '女', '足球')  # 主动传入了参数,将以传入的参数为主

'''

您的名字是白,您的性别是男,您的爱好是打篮球
您的名字是黑,您的性别是女,您的爱好是足球

'''

 5.不定长参数

print('------------------不定长参数-----------------------')

# 不定长参数,不定长参数:不定长参数也叫可变参数.
# 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
'''
可变参数:不定长参数
位置传参数:一个个数据,使用*args接收,默认把数据存储到了元组
关键字传参,一对对数据,使用**kwargs,默认把数据存储到字典
'''


def user_info(*args):
    print(args)


user_info('张三')
user_info('李四', 18)


def user_info(**kwargs):
    print(kwargs)


user_info(name='张三', age=18, gender='女')


# {'name': '张三', 'age': 18, 'gender': '女'}

def show2(*args):
    print(args)


show2(1, 2)


def show2(*args, **kwargs):
    print(args)
    print(kwargs)
    print(type(kwargs))


show2(3, 4, a=4, b=5, c=6)
#  {'a': 4, 'b': 5, 'c': 6},<class 'dict'>

 6.调用参数时,位置参数一定要在最前面

'''定义函数顺序要求
位置参数放最前面-关键字参数-不定长参数也可以作为位置参数
'''

'''定义一个求和的参数'''
def sum_get(*args, **kwargs):
    sum_1 = 0
    for i in args:
        sum_1 += i
    return sum_1


a = sum_get(1, 2, 3, 4, 5)
print(a)

 双击字符,在点击键盘上的引号,可以直接给字符添加

7.利用不定长参数,定义一个可以给多个参数求和的参数 

'''定义一个求和的参数'''


def sum_get(*args, **kwargs):
    sum_1 = 0
    for i in args:  # 把输入的实际参数遍历
        sum_1 += i
    return sum_1


a = sum_get(1, 2, 3, 4, 5)
print(a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白的wj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值