文章目录
1.二维数组的创建
*使得列表内的数据复制n次,这n个数据指向同一内存地址。
第二种方式使得3个一维列表指向同一内存地址,又因为列表是可变变量,所以修改某个列表其指向的地址不变,使得三个列表都改变。
而第一种方式3个int变量指向同一内存地址,但int是不可变变量,修改为1后指向另外的内存地址,因此其他两个0不变。而for使得一维数组复制而不是引用。
arr2D = [[0]*3 for _ in range(3)] # 二维数组的创建
arr2D[0][1] = 1 # [[0, 1, 0], [0, 0, 0], [0, 0, 0]]
arr2D_1 = [[0]*3]*3
arr2D_1[0][1] = 1 # [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
2.列表推导式
list = []
t = ()
dict = {}
s = set()
s = {i for i in range(3)} # 无序集合,可变数据
# 将开头为a的字符串变成大写,其余不变
name = ['abc', 'www', 'mike', 'ancher']
name_modify = [n.upper() if n.startswith('a') else n for n in name]
print(name_modify)
3.函数注解
def func(a: int, b: list) -> float:
pass
a: int = 1
4.语法糖
a, b = b, a # 交换值
if 90<= a <= 100: # 比较语句合并
a = '-' * 60
b = [1] * 60 # 乘法
a = [1, 2, 3]
b = [4, 5, 6]
a + b # [1, 2, 3, 4, 5, 6]
a[1:2] # 切片前闭后开
a = (1, 2, 3)
x, y, z = a # 解包
5.Python输出
name = 'achao'
# 几种显示方式
print('My age is ' + str(age) + '. ' + 'My name is ' + name)
print('My age is', age, '.', 'My name is', name) # 这种方式自动在每段后加空格
print('My age is %d. My name is %s' %(age, name))
print('My age is {}. My name is {}'.format(age, name))
print(f'My age is {age}. My name is {name}')
6.映射函数
将函数作用于结构中的每一个元素,返回迭代器。迭代器也是可变对象,因此需要使用深拷贝另外存一个。
import copy
l1 = [-11, -442, 3, -464, 5]
i2 = map(abs, l1)
i3 = copy.deepcopy(i2)
for i in i2:
print(i)
print(list(i3))
7.三元运算符
可以一下使用多个三元运算符,像原始if…else…语句一样排列即可。
age = 90
print('big big number!' if age > 80 else 'big number!' if age > 40 else 'small' if age >0 else 'wrong!')
8.enumerate枚举
a = [1, 2, 3, 4, 5]
for idx, i in enumerate(a):
print(idx, i)
9.any all
is_even = lambda x: not x&1
a = [1, 2, 3, 4, 5]
a_bool = [is_even(i) for i in a]
print(any(a_bool), all(a_bool)) # 只要里面一个是True,any就是,all需要全部都是
10.列表反转
list1 = [1, 2, 3, 4, 5]
list1.reverse() # list1[::-1] 得到新列表
list2 = reversed(list1) # 返回迭代器
print(list1, list(list2)) # [5, 4, 3, 2, 1] [1, 2, 3, 4, 5]
name = ['mike', 'carl', 'devid', 'veil']
age = [12, 14, 23, 77]
print(sorted(name), list(reversed(age))) # 与c++区别就是函数后加d,同时直接传入列表即可
11.字符串连接
list_str = ['123', 'hahha', 'ok']
str1 = ' '.join(list_str) # 前一个是后面列表的分隔符
print(str1)
12.函数文档
def sum(a, b):
"""
This function is to add two nums.
:param a
:param b
:return: a+b
"""
return a + b
print(help(sum), sum.__doc__)
# sum(a, b)
# This function is to add two nums.
# :param a
# :param b
# :return: a+b
#
# None
# This function is to add two nums.
# :param a
# :param b
# :return: a+b
13.zip()与*
zip()接收列表,返回列表,其中每个元素是包括所有列表对应元素的元组。如果列表长度不同,返回能对应的最大长度。
*将列表中的元素取出同时放入函数中。
def main():
name = ['mike', 'carl', 'devid', 'veil']
age = [12, 14, 23, 77]
cbn = zip(name, age)
c = list(cbn) # [('mike', 12), ('carl', 14), ('devid', 23), ('veil', 77)]
print(c)
k = zip(*c)
print(list(k)) # [('mike', 'carl', 'devid', 'veil'), (12, 14, 23, 77)]
if __name__ == '__main__':
main()
14.交换两个值或者多个值
a, b, c = c, b, a
a = a^b
b = a^b
a = a^b
15.将多个字典合并为一个
d1 = {1: 'mike', 2: 'divid'}
d2 = {3: 'haha', 1: 'dachao'}
d1.update(d2) # 将d2新的key添加,老的key更换为d2的新值
d3 = {**d1, **d2}
16.切片
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
s1 = '123456789'
FIRST = slice(0, None)
print(l1[FIRST] == l1[0:])
REVERSERANGE2 = slice(1, 5, 3)
print(s1[REVERSERANGE2])
print(s1[5: 1: -3]) # 倒着切片起始终止点也要变化
17.列表中出现次数最多的元素
a = [1, 2, 3, 3, 4, 54, 4, 4, 3, 3, 4]
def main():
print(max(set(a), key=a.count)) # 求出现次数最大对应的值
print(max(set(a)))
if __name__ == '__main__':
main()