day06-元组和字典

总结

一、列表相关函数和方法

1. 列表相关函数:max、min、sum、len、sored、reversed、list
max(序列) - 获取序列中最大的元素(序列中的元素本身必须支持比较运算,并且

nums = [89, 23, 45, 890, 82, 12, 40]
print(max(nums)) # 890

min(序列) - 获取序列中最小的元素

print(min(nums))

sorted(序列) - 将序列中的元素从小到大排序,返回一个排完序以后的新列表

nums = [5, 2, 5, 7, 3, 9, ]

list(序列) - 将其他序列转换成列表

print(list(‘abc’))
names = [‘罗小黑’, ‘海贼王’, ‘一人之下’, ‘进击的巨人’, ‘死亡笔记’, ‘海贼王’]
print(names.index(‘一人之下’)) # 2

6)列表.reverse() - 将列表倒叙(不会产生新的列表)
7) 列表.sort() - 将列表元素从小到大排序

nums = [78, 90, 67, 56, 99]
nums.sort()
print(nums)

二、列表推导式

1.推导式通用格式1
[表达式 for 变量 in 序列]
创建列表的原理:
list1 = []
for 变量 in 序列:
list1.append(表达式)
“”"
list1 = [x for x in range(4)]
print(list1)
list2 = [2 * x + 3 for x in range(4)]
print(list2) # [3,5,7,9]
list3 = [x * 2 for x in ‘abc’]
print(list3)

练习:已知列表scores = [89, 34,56,23,90,100],将列表中的成绩转换成十分制的值
scores = [89, 34,56,23,90,100] -> [8.9,3.4,5.6,2.3,9.0,10]

scores = [89, 34, 56, 23, 90, 100]
new_scores = [x / 10 for x in scores]
print(new_scores)

补充:三目运算符

“”"

  1. C的三目运算符:
    表达式1?表达式:表达式3 -> 如果表达式1的值是0,整个运算表达式的结果是表达式3,否则整个运算表达式的值是表达式2
    变量 = 表达式2 if 表达式1 else 表达式3
    “”"
    age = 17
    result = ‘成年’ if age >= 18 else ‘未成年’
    if age > 18:
    result = ‘成年’
    else:
    result = ‘未成年’
    print(result)
    scores = [89, 34, 56, 23, 90, 100]

new_scores = [‘不及格’ if x < 60 else ‘及格’ for x in scores]
print(new_scores)

2.推导式通用格式2

“”"
表达式 for 变量 in 序列 if 条件语句]

原理:
list = []
for 变量 in 序列:
if 条件语句:
list.append(表达式)
“”"
nums = [23, 89, 98, 67, 23, 44, 60]
new_nums = [x for x in nums if x % 2 == 1]
print(new_nums)

三、推导式整理

1.整体变换 - 将原序列中的元素通过统一的规则转换成一个新的序列
方案:[表达式 for 变量 in 序列] - 表达式用来描述新序列中的元素和原序列元素之间的规则

nums = [23, 789, 90, 67, 22, 31]
result = [x % 10 for x in nums]
print(result) # [3,9,0,7,2,1]

2.部分变换(按照两种不同的方式变换)
方案:[三目运算 for 变量 in 序列]

list1 = [23, ‘abc’, 78, ‘234’, 1.23, [10, 30]]
result = [x*10 if type(x) in [int,float] else x for x in list1]
print(result)

3.筛选、删除
方案:[for 变量 in 序列 if 条件语句]

scores = [89,33,67,8,98,23,66,81]
result = [x for x in scores if x >= 60]
print(result) #[89,67,98,66,81]

四、元组

“”"
元组是容器数据类型(序列),将()作为容器标志里面多个元素用逗号隔开:(元素1,元素2,元素3,…)
元组是不可变的(不支持增删改)、元组是有序(支持下标操作)
任何类型的数据都可以作为元组的元素
“”"
t1 = ()
print(t1, type(t1), len(t1))

2)只有一个元素的元组

l1 = [100]
print(l1, type(l1))

t2 = (100)
print(t2, type(t2))

t3 = (100,)
print(t3, type(t3))

3)普通元组

t4 = (10, 12.9, ‘abc’, 10)
print(t4, type(t4))

2.元组就是不可变的列表
列表中凡是和增删改不相关的操作元组都支持
1)查

t5 = (‘肖申克的救赎’, ‘阿甘正传’, ‘霸王别姬’, ‘美丽人生’, ‘黑客帝国’, ‘触不可及’, ‘这个杀手不太冷’, ‘v字仇杀队’)
print(t5[1])
print(t5[-1])

print(t5[100]) # IndexError: tuple index out of range

print(t5[1:])
print(t5[3:0])
print(t5[2:-2:2])

for x in t5:
print(‘x:’, x)

for index in range(len(t5)):
print(index, t5[index])

2)+、*
l1 = [1, 2, 3]
result = l1 + [10,20]
print(result,l1)

t6 = (10, 20)
print(t6 + (100, 200)) # (10, 20, 100, 200)

print(t6 * 3) # (10, 20, 10, 20, 10, 20)

print(1 in t6) # False
print(10 in t6) # True

3) max、min、sum、sorted、reversed、len、tuple

scores = (98, 78, 67, 56, 23, 45, 99, 82, 86, 99)
print(max(scores))
print(min(scores))
print(sum(scores))
print(sorted(scores))
print(tuple(‘abc’))
print(tuple([10, 230, 4]))

4)相关方法:count、index

print(scores.count(99))
print(scores.index(56))

3.元组不只是不可变列表
1)元组的()在没有歧义的情况下可以去掉(元组特有的)

t1 = 10, 20, 30
print(t1, type(t1)) # (10, 20, 30) <class ‘tuple’>

t2 = 10, 20, 30 * 2
print(t2)

2) 获取元组元素;让变量个数和元组中元素个数一致

point1 = (10, 98)

print(point1[0],point1[1])

x, y = point1
print(x, y)

point2 = (-19, 89, 29)
x, y, z, = point2
print(x, y, z) #-19 89 29

x1, y1 = point2 #ValueError: too many values to unpack (expected 2)
x1, y1, z1, t1 = point2
3)获取元组元素;让变量个数小于元组中元素个数,但是必须在某一个变量前加*
先让不带的变量按照位置去获取元组中的元素,然后让剩下的元素全部作为一个列表返回给带的变量

t2 = (100, 200, ‘abc’, ‘男’, True, 300)
*x, y, z = t2
print(y,z) #True 300
print(x) #[100,200,‘abc’,‘男’]

x, y, *z = t2
print(x, y)
print(z)

x, *y, z = t2
print(x, z)
print(y)

x, *y, z, t = t2
print(y)

五、认识字典

定义一个变量保存一个学生的信息

stu1 = {‘name’:‘小明’,‘age’:18,‘height’:170,‘weight’:74,‘score’:80,‘性别’:‘男’}
print(stu1[‘姓名’])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我能为您提供Python语言的实现代码,但是我无法上传文件或代码片段,请您理解。 以下是代码实现: 1. 列表 ```python def day_of_year_list(date): days_month = [31,28,31,30,31,30,31,31,30,31,30,31] year, month, day = date.split('-') year, month, day = int(year), int(month), int(day) if (year%4==0 and year%100!=0) or year%400==0: days_month[1] = 29 days_count = sum(days_month[:month-1]) + day return days_count ``` 2. 元组 ```python def day_of_year_tuple(date): days_month = (31,28,31,30,31,30,31,31,30,31,30,31) year, month, day = date.split('-') year, month, day = int(year), int(month), int(day) if (year%4==0 and year%100!=0) or year%400==0: days_month = (31,29,31,30,31,30,31,31,30,31,30,31) days_count = sum(days_month[:month-1]) + day return days_count ``` 3. 集合 ```python def day_of_year_set(date): days_month = {1:31,2:28,3:31,4:30,5:31,6:30, 7:31,8:31,9:30,10:31,11:30,12:31} year, month, day = date.split('-') year, month, day = int(year), int(month), int(day) if (year%4==0 and year%100!=0) or year%400==0: days_month[2] = 29 days_count = sum([days_month[i] for i in range(1, month)]) + day return days_count ``` 4. 字典 ```python def day_of_year_dict(date): days_month = {'January':31, 'February':28, 'March':31, 'April':30, 'May':31, 'June':30, 'July':31, 'August':31, 'September':30, 'October':31, 'November':30, 'December':31} year, month, day = date.split('-') year, day = int(year), int(day) if (year%4==0 and year%100!=0) or year%400==0: days_month['February'] = 29 days_count = sum([days_month[key] for key in days_month.keys() if key!=month]) + day return days_count ``` 以上是针对不同数据类型的实现,您可以根据需要选择其中一种来使用。具体调用方法如下: ```python date = '2022-02-08' days_count_list = day_of_year_list(date) # 使用列表实现的方法 days_count_tuple = day_of_year_tuple(date) # 使用元组实现的方法 days_count_set = day_of_year_set(date) # 使用集合实现的方法 days_count_dict = day_of_year_dict(date) # 使用字典实现的方法 print(f"使用列表实现的方法计算结果为:{days_count_list}") print(f"使用元组实现的方法计算结果为:{days_count_tuple}") print(f"使用集合实现的方法计算结果为:{days_count_set}") print(f"使用字典实现的方法计算结果为:{days_count_dict}") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值