List 遍历的4种方法:
方法1:

for i in list:
 print i

方法2:

for i in range(len(list)):
 print i, list[i]

方法3:

for i in xrange(len(list)):
 print i, list[i]

方法4:

for i, j in enumerate(list):
 print i, j

xrange 和range的区别:
range会直接将所有结果生成一个list对象
xrange则不会直接生成一个list,而是一个生成器,会每次调用返回其中的一个值
因此,xrange的循环性能比range好,尤其是当列表返回很大的情况。但是当你需要返回是一个列表的话,可以使用range

python for 1开始,倒序输出

l=[‘a’,‘b’,‘c’,‘d’,‘e’]
 for i in range(len(l)-1,-1,-1):
 print(l[i])


这里range(len(10)-1,0,-1)意思是从列表的下标为10的元素开始,倒序取到下标为0的元素(但是不包括下标为0元素)
,因此需要写成10-1,-1,-1 。从0-9表示10,第9位开始,-1表示到0结束,-1表示步长倒序**。len(x)-1不然肯定会超限**

l=[‘a’,‘b’,‘c’,‘d’,‘e’]
 for i in reversed(l):
 print(i)

python实现16进制字符串转化为ascii字符
最简单的实现

a = bytes.fromhex('437261636b4d654a757374466f7246756e')
print(a)

常规写脚本实现

a = “456e633064316e675f31735f66336e”
 ‘’.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]])


拆分了代码,实际运行了一下,解释一下代码的意思:
1、[a[i:i+2] for i in range(0, len(a), 2)]
这段是lamda表达式,说白了,就是一个for循环,范围是从0开始到a字符串的长度,每次步进2,也就是第一次是0,第二次是2,第三次是4。。。
相应的 a[i:i+2],就是第一次从a里取出0:0+2 也就是0:2,那么实际上类似于数组,也就是取出a字符串的前面2个字符,注意这里0:2 实际上是不包含2的,只是0、1而已。
然后,外面的一层[ ]的意思就是把循环的返回结果放到一个 列表里,列表就是[]包含在内的,用逗号分隔的串。但是这样表达式可以起到简化代码的作用。

python中’ '.JOIN()的使用
将序列中的元素以指定的字符连接生成一个新的字符串。
语法: ‘delimiter’.join(seq) #分隔符
delimiter:分隔符。可以为空
delimiter:要连接的元素序列、字符串、元组、字典
返回通过指定字符连接序列中元素后生成的新字符串。

a=“abcd”
 “,”.join(a)
 ‘a,b,c,d’“|”.join([‘a’,‘b’,‘c’])
 ‘a|b|c’“,”.join((‘a’,‘b’,‘c’))
 ‘a,b,c’

bytes对象的hex函数,用来将bytes对象的值转换成hexstr;而fromhex函数,用来将hexstr导入bytes对象,相当于用hexstr来创建bytes对象。bytes对象的这两个函数,有的时候非常好用!

>>> bytes([0,1,2,3,4,5]).hex() #0,1,2,3,4,5转16进制
'000102030405'
>>> bytes.fromhex('000102030405')#16进制转  b'\x00\x01\x02\x03\x04\x05'表示bytes
b'\x00\x01\x02\x03\x04\x05'

>>> b'abcde'.hex() #b' ' 表示这是一个bytes对象,abcde字符串转16进制
'6162636465'
>>> a = bytes.fromhex('6162636465') # 从十六进制数转成字符串
>>> a
b'abcde'

bytes对象的hex函数可以用来对bytes对象的内容进行显示,而fromhex可以用来对输入进行直接bytes化