每日一课 | 小白必备基础对象练习

Python大本营每日一课

大家好,我是营长,上期营长分享了“小白必备基础语法练习”:,不清楚的小伙伴可戳这????小白必备基础语法练习

本期营长将为大家分享如何快速入门Python开发。

这期分享营长邀请的是zglg(算法工程师)分享Python 全栈 450 道常见问题全解析。

小白必备基础对象练习

DAY01 

list 内元素类型要求一致吗?

list 不要求元素类型一致,如下列表 lst 内元素类型有3种:

lst = [1,'xiaoming',29.5,'17312662388']
for _ in lst:
    print(f'{_}的类型为{type(_)}')

打印结果如下,列表 lst 内元素类型有3种:

1的类型为<class 'int'>
xiaoming的类型为<class 'str'>
29.5的类型为<class 'float'>
17312662388的类型为<class 'str'>

list 对象怎样实现增加、删除元素?

使用 append 方法增加一个元素到列表最后:

lst2 = ['001','2019-11-11',['三文鱼','电烤箱']]
sku = lst2[2] # sku又是一个列表
sku.append('烤鸭')
print(sku)

结果:[‘三文鱼’, ‘电烤箱’, ‘烤鸭’]

使用 insert 方法插入指定元素到指定索引处。

使用 remove 方法删除元素:

sku.remove('三文鱼')
sku

结果:[‘电烤箱’, ‘烤鸭’]

pop 方法默认删除列表最后一个元素:

sku.pop()
sku

结果:[‘电烤箱’]

a 为 list, 使用 a[:-1] 返回哪些元素?

使用 a[:-1] 获取到除最后一个元素的切片

a 为 list, 使用 a[1:5:2] 返回哪些元素?

使用 a[1:5:2] 生成索引 [1,5) 且步长为 2 的切片

如 a 等于 [1, 4, 7, 10, 13, 16, 19]

返回的元素为:[4,10]

a 为 list, 使用 a[::-3] 返回哪些元素?

生成逆向索引 [-1,-len(a))且步长为 3 的切片。

如 a 等于 [1, 4, 7, 10, 13, 16, 19]

返回的元素为:[19,10,1]

如何去掉最值求平均?

去掉列表中的一个最小值和一个最大值后,计算剩余元素的平均值。

def score_mean(lst):
    lst.sort()
    lst2=lst[1:-1]
    return round((sum(lst2)/len(lst2)),1)

lst=[9.1, 9.0,8.1, 9.7, 19,8.2, 8.6,9.8]
score_mean(lst) # 9.1

代码执行过程,动画演示:

如何打印出 99 乘法表?

for i in range(1,10):
    for j in range(1,i+1):
        print('%d*%d=%d'%(j,i,j*i),end='\t')
    print()

打印结果:

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

判断 list 内有无重复元素

is_duplicated,使用 list 封装的 count 方法,依次判断每个元素 x 在 list 内的出现次数。

如果大于 1,则立即返回 True,表示有重复。

如果完成遍历后,函数没返回,表明 list 内没有重复元素,返回 False

def is_duplicated(lst):
    for x in lst:
        if lst.count(x) > 1:
            return True
    return False

调用 is_duplicated 方法:

a = [1, -2, 3, 4, 1, 2]
print(is_duplicated(a)) # True

以上方法实现不简洁,借助 set 判断更方便:

def is_duplicated(lst):
    return len(lst) != len(set(lst))

列表反转

一行代码实现列表反转,非常简洁。

[::-1],这是切片的操作。

[::-1] 生成逆向索引(负号表示逆向),步长为 1 的切片。

所以,最后一个元素一直数到第一个元素。这样,不正好实现列表反转吗。

def reverse(lst):
    return lst[::-1]

调用 reverse:

r = reverse([1, -2, 3, 4, 1, 2])
print(r)

结果:[2, 1, 4, 3, -2, 1]

求表头

返回列表的第一个元素

注意,列表为空时,返回 None

通过此例,学会使用if 和 else的这种简洁表达。

In [18]: def head(lst):
    ...: return lst[0] if len(lst) > 0 else None

调用head:

In [19]: print(head([]))
    ...: print(head([3, 4, 1]))
None
3

 求表尾

求列表的最后一个元素,同样列表为空时,返回 None.

In [20]: def tail(lst):
    ...: return lst[-1] if len(lst) > 0 else None

调用 tail:

In [21]: print(tail([]))
    ...: print(tail([3, 4, 1]))
None
1

元素对

t[:-1] , 原列表切掉最后一个元素;

t[1:], 原列表切掉第一个元素;

zip(iter1, iter2),实现 iter1 和 iter2 的对应索引处的元素拼接。

In [32]: list(zip([1,2],[2,3]))
Out[32]: [(1, 2), (2, 3)]

理解上面,元素组对的实现就不难理解:

In [28]: def pair(t):
    ...: return list(zip(t[:-1],t[1:]))

调用 pair:

In [29]: pair([1,2,3])
Out[29]: [(1, 2), (2, 3)]

In [30]: pair(range(10))
Out[30]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]

一行代码生成 [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

使用列表生成式,创建列表,观察元素出现规律,可得出如下代码:

In [97]: a = [2*i+1 for i in range(10)]

In [98]: a
Out[98]: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

写一个等差数列

产生一个首项为 10,公差为 12 ,末项不大于 100 的列表

使用列表生成式创建:

In [1]: a = list(range(10,100, 12))

In [2]: a
Out[2]: [10, 22, 34, 46, 58, 70, 82, 94]

一行代码求 1到10000内整数和

提供两种方法

使用 Python 内置函数 sum 求和:

In [99]: s = sum(range(10000))

In [100]: s
Out[100]: 49995000

使用 functools 模块中的 reduce求和:

In [101]: s = reduce(lambda x,y: x+y, range(10000))

In [102]: s
Out[102]: 49995000

 tuple 对象可以增加、删除元素吗?为什么?

不能增加、删除元素,因为元组 tuple 是不可变对象,不可变的英文:immutable.

只有不可变对象才能作为字典的键,因此 {[]:‘this is an expection’} 会抛出异常。

如何创建一个字典?

使用一对花括号 {} 另使用冒号 :,创建一个 dict 对象

dic = {'a':1, 'b':3, 'c':5} # dict变量

五种创建字典的方法

1 手动创建

empty = {}
dic = {'a':1,'c':3,'e':5}

2 使用 dict() 构造函数

In [10]: dict(a=1,b=2,c=3)
Out[10]: {'a': 1, 'b': 2, 'c': 3}

3 键值对+关键字参数

第一个参数为字典,后面是一系列关键字参数,如 c=3

In [9]: dict({'a':1,'b':2},c=3,d=4)
Out[9]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

可迭代对象

列表,元素又为一个元组,后面再加一系列关键字参数。

In [8]: dict([('a',1),('b',2)],c=3)
Out[8]: {'a': 1, 'b': 2, 'c': 3}

5 fromkeys() 方法

已知键集合( keys ), values 为初始值:

In [7]: {}.fromkeys(['k1','k2','k3'],[1,2,3])
Out[7]: {'k1': [1, 2, 3], 'k2': [1, 2, 3], 'k3': [1, 2, 3]}

In [14]: {'a':1,'b':2}.fromkeys(['c','d'],[1,2])
Out[14]: {'c': [1, 2], 'd': [1, 2]}

下期预告:小白必备基础对象练习(完结)

以上内容均来自CSDN GitChat《Python 全栈 450 道常见问题全解析(配套教学)》,作者zglg, 某大厂算法工程师,识别二维码查看专栏更多详情。

专栏限时特价

仅限5月4日-6月1日

仅需69元

识别二维码查看详情

????????

点击阅读原文

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值