会持续更新
在更新变量前必须进行初始化
下面是统计一串字符串中各个字符出现次数的代码
1 | n='aabbbcdeeee' |
重点在dic[i]=0
和dic[i]+=1
错误的写法:
1 | for i in n: |
dic[i]=0
为初始化过程,没了这一步就会报错
如何判断数据类型
现在有s="abc"
判断:
1 | #1 |
is
的作用是用来检查两者引用的对象是否相同(或者说是指向的内存地址是否相同)
(列表的)切片除了返回一个副本,还可以表示一个范围来进行赋值
1 | l = ['a', 'b', 'c', 'd', 'e'] |
字符串的比较
按照字典序,依次对应比较字符的ASCII码值,一旦比出来就不比了
1 | print('abcdefg' < 'b') # --> True |
一些列表和字符串方法的注意点
1 | 'a b'.strip() # 正确 |
删除列表元素的各种方法
listobj.pop(index)
return 被删除的值
举例:得1
2
3
4l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = l.pop(5)
print(l)
print(result)1
2[1, 2, 3, 4, 5, 7, 8, 9, 10]
6listobj.remove(value)
return None
举例:得1
2
3
4l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = l.remove(5)
print(l)
print(result)1
2[1, 2, 3, 4, 6, 7, 8, 9, 10]
None- 直接
del
del listobj[index]
或del listobj[start_index:end_index]
不会产生任何输出
for i in dictobj问题
只会变遍历字典中的键!!
若要遍历值for i in dictobj.values()
应用:
1 | def reverse_loopup(dictobj, target_value, multi=True): |
multi的作用是是否寻找出所有该值对应的键(因为一个值是可以被多个键所关联的)
局部变量问题
局部变量:一个缩进体中的变量即为这个块的局部变量
1 | for i in range(10): |
这是错误的,i只在for loop体里有效
1 | been_called=False |
得
1 | bc in func: True |
也就是说这两个同名的变量并不是同一个东西
如果一定要修改全局been_called的值,可以用global
声明变量
1 | been_called = False |
得
1 | bc in func: True |
元组、列表的分散和收集
1 | def f(*args): |
得
1 | (1, 2, 3, 4, 5) |
*
在这里的作用是收集,把所有的参数合并为一个元组
其中按位实参用**
收集,返回dict(按位实参就是上文reverse_loopup()中的multi=True)
举例:
1 | def f(*args, **kargs): |
得
1 | (1, 2, 3, 4, 5) {'sixth': 6} |
注:sixth
不能打上引号,=
后的数据类型不限制
对于列表的分散:
1 | l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
得
1 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
元组的定义和交换
元组不一定要用()括起来,t=1,2
也是个元组表达式,对于只有一个元素的元组需要以,
结尾,t=1,
1 | a=1 |
这里就用到了元祖的交换,不需要第三者变量就能实现swap
三元条件
1 | import math |
可简化为:
1 | import math |
语句 if 条件表达式 else 语句
如果if后的条件成立则执行最开始的语句,否则执行最后的语句
利用zip()同时遍历两个列表
zip()绑定两个序列中的元素为元组(一一对应,取两者中短的)
1 | l1 = ['a', 'b', 'c', 'd', 'e'] |
得:
1 | ('a', 1) |
不等长的时候:
1 | l1 = ['a', 'b', 'c', 'd', 'e'] |
结果和上一个相同
#any()和all()
都接受由布尔值组成的序列,例如list和generation expression
1 | any([False,True,False]) # --> True |
listobj.append()与listobj.extend()
- listobj.append()接受单个元素
- listobj.extend()接受列表
两者功能相似
1 | l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
得[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 114514]
1 | l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
得[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 4, 5, 1, 4]