承接 【python】基本数据类型(1)
文章目录- 2 牛刀小试
- 交换变量
- 判断两个字符串是否 anagram
- 字符串倒转
- 项目文件事先做好归档
- 带符号的 16 进制转 10 进制
- sys.getsizeof 变量的内存占用
- 多变量赋值
- 获取数字表 / 字母表
- 剔除掉字符串中的数字 / 字母
- A 附录
- eval()
- exec
一种常规的方法是用一个临时变量
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 字符串
来自 分享8点超级有用的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剔除掉字符串中的数字 / 字母
isalpha 借助高阶函数 filter 即可
s = 'a1b2c3d4e5f6g7'
print(list(filter(lambda x:x.isalpha(), 'a1b2c3d4e5f6g7')))
print("".join(list(filter(lambda x:x.isalpha(), 'a1b2c3d4e5f6g7'))))
output
['a', 'b', 'c', 'd', 'e', 'f', 'g'] abcdefg
拓展:剔除掉字符串中的字母
isdigit 借助高阶函数 filter 即可
s = 'a1b2c3d4e5f6g7'
print(list(filter(lambda x:x.isdigit(), 'a1b2c3d4e5f6g7')))
print("".join(list(filter(lambda x:x.isdigit(), 'a1b2c3d4e5f6g7'))))
output
['1', '2', '3', '4', '5', '6', '7'] 1234567
A 附录 eval()
直接把字符串当语句执行,太方便了!这样可以通过改变字符串来达到运行不同语句(调用函数,调用其他 py 文件等等)了
参考:https://www.runoob.com/python/python-func-eval.html
但同时也要考虑其危险性,感兴趣的话可以阅读 Python中eval的强大与危害
exec比 eval 功能更强大
来自 Python exec 内置语句
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
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】



