Python从入门到精(fang)通(qi)

简介

第一篇博客,记录python学习。

知识点积累

1.生成结构体数组

class Node:
    def __init__(self):
        self.x = 1
        self.y = 1
        self.s = 0
if __name__ == "__main__":
	#  生成容量为101的结构体对象数组
    q = [Node() for i in range(101)]

2.变量作用域问题

这里讲的很清楚了:https://www.jianshu.com/p/17a9d8584530
目前遇到的情况(遇到新的会接着更新):

  • 1

在函数外定义的变量,如果想在函数里使用,需要加上全局变量申明,否则会报错,例如这里的“mini”。

mini = 99999

#cur为当前位置,dis截至cur位置,已经耗费多少距离
def dfs(cur, dis):
    global mini
    if dis>mini:
    	return   

3.counter类用法 (可以统计单词个数)

#collections.Counter 类的用法
from collections import Counter
words = ['apple', 'pinapple','apple','orange', 'eyes', 'orange', 'a', 'b']
word_counts = Counter(words)

#1.查找频率最高的三个单词
top_three = word_counts.most_common(3)
print(top_three)

#2.查找某个单词出现的次数
print(word_counts['apple'])

out:
在这里插入图片描述

4.eval()函数使用

eval() 函数是用来执行一个字符串表达式,并返回表达式的值。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
补充:eval()提取字符串中的数字部分,并转换为对应的数值类型。

if __name__ == "__main__":
    s = "1234RMB"
    s_0 = eval(s[:-3])
    print(type(s_0))
    print(s_0)

    S = "1234.456RMB"
    S_0 = eval(S[:-3])
    print(type(S_0))
    print(S_0)

在这里插入图片描述
(早知道这个是算字符串的,CCF就省了180块钱了,(┬_┬))

5.lambda表达式

  • lambda只是一个表达式,函数体比def简单很多,很多时候定义def,写一个函数太麻烦,可以使用。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
  • 语法: lambda [arg1 [,arg2,…argn]]:expression
    在这里插入图片描述
    在这里插入图片描述filter()方法将在下面介绍。

6.filter() 过滤函数

  • 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

  • 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

  • 例1
    在这里插入图片描述
    Out:
    在这里插入图片描述

  • 例2

#过滤出1~100中平方根是整数的数:
import math
def judge(n):
    return  math.sqrt(n)==int(math.sqrt(n))
print(list(filter(judge, range(1, 101))))

在这里插入图片描述

7.反向遍历列表

第一个-1表示右区间(取不到),第二个-1表示步长。

for i in range(5, -1, -1):
    print(i)

运行结果
在这里插入图片描述

8.列表去重(保持去重前元素的有序性)

# list去重 (仍然保持元素顺序)
# 方法一
print("方法一:")
li = [3, 1, 2, 4, 4, 5, 3]
new_li = []
for i in li:
    if i not in new_li:
        new_li.append(i)
print("new_li:", new_li)
print("-------------------------")
# 方法二 set, set不能保留list去重前元素的顺序。
print("方法二(set):")
new_li = set(li)
print("new_li:", new_li, " 无法保证原列表元素顺序")
print("----------------------------------------------------")
print("可以通过列表中索引(index)的方法保证去重后的顺序不变:")
new_li = list(set(li))
new_li.sort(key=li.index)
print("new_li:", new_li)

在这里插入图片描述

报错解决

  • UnboundLocalError: local variable ‘xxx’ referenced before assignment
    这个报错一般是在函数外部已经定义了变量n,在函数内部对该变量进行运算,导致解释器不清楚当前变量是全局变量还是局部变量。
    解决方法:在函数内部对该变量用global 进行修饰。

    def rate_conver(n):
        global count
    	...
    
    if __name__ == "__main__":
        count = 0
        ...
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值