【python】小知识


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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值