文章目录
2 牛刀小试
交换变量
一种常规的方法是用一个临时变量
a,b = 5,10
print(a,b)
tmp = a
a = b
b = tmp
print(a,b)
output
5 10
10 5
python有更简洁的写法
a,b = 5,10
print(a,b)
a,b = b,a
print(a,b)
output
5 10
10 5
判断两个字符串是否 anagram
anagram:相同字母异序词,易位构词,变位词。eg:abc,bca,acb,可以用from collections import Counter
from collections import Counter
str1 = 'abc'
str2 = 'bca'
Counter(str1)==Counter(str2)
output
True
字符串倒转
法一,用 reversed
,
a = '12345'
for char in reversed(a):
print(char,end='')
output 54321
法二,a[::-1],列表也同样适用
a = 'i love you'
a [::-1]
output 'uoy evol i'
法三
更多的字符串内置函数请看
Python 字符串
项目文件事先做好归档
很多人喜欢直接用绝对路径,但如果代码共享给其他人学习或者运行,很多情况下都不能直接跑通,建议使用相对路径!
带符号的 16 进制转 10 进制
先把 16 进制转为 10 进制,再转为 2 进制
def jinzhi16_10(str16):
# 16 进制 to 2进制
str2 = bin(int(str16, 16))[2:].zfill(4*(len(str16)-2)) # 16-10-2,remove 0b for 2 进制, fill 0 to make one 16 equal to four 2
sum = 0
if str2[0] == "1":
for i in range(1, len(str2)):
if str2[i] == '0': # 取反,本来应该是为 1 的时候计算的
sum += 2**(len(str2)-i-1)
print('-%d' % (sum+1)) # 加 1,二进制上加 1 和十进制上加 1 结果一样
else:
print(int("0b"+str2[1:], 2)) # 二进制转十进制
jinzhi16_10("0xBA")
jinzhi16_10("0x35")
output
-70
53
对于正数,补码就是原码,对于负数,补码等于原码求反后加一的结果。
sys.getsizeof 变量的内存占用
import sys
var1 = 15
list1 = [1,2,3,4,5]
print(sys.getsizeof(var1))
print(sys.getsizeof(list1))
output
28
96
多变量赋值
a,b,*c = [1,2,3,4,5]
print(a,b,c)
output
1 2 [3, 4, 5]
获取数字表 / 字母表
import string
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.digits)
output
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
A 附录
eval()
直接把字符串当语句执行,太方便了!这样可以通过改变字符串来达到运行不同语句(调用函数,调用其他 py 文件等等)了
参考:https://www.runoob.com/python/python-func-eval.html
但同时也要考虑其危险性,感兴趣的话可以阅读 Python中eval的强大与危害
exec
比 eval 功能更强大
code = """
list1 = [1, 2, 3, 4, 5, 6, 8, 1, 2, 3, 6, 9, 8, 6]
from collections import Counter
print(type(Counter(list1)))
print(Counter(list1))
print(dict(Counter(list1)))
"""
exec(code)
output
<class 'collections.Counter'>
Counter({6: 3, 1: 2, 2: 2, 3: 2, 8: 2, 4: 1, 5: 1, 9: 1})
{1: 2, 2: 2, 3: 2, 4: 1, 5: 1, 6: 3, 8: 2, 9: 1}
Note: 更多连载请查看【python】