Python技巧

Python实用技巧

  • 实用技巧
    • 迭代器排序函数 sorted
    • for if 写在一行
    • 排列与组合 permutations, combinations
    • 字符串填充补零 rjust、format
    • 去除两个集合中重复元素 ^
    • 对变长数组操作 list

实用技巧

迭代器排序函数 sorted

sorted() 函数对所有可迭代的对象进行排序操作。

  • 对于字符串可以直接用,会按照ASCII码排序。
    • range(65, 91)是大写字母A-Z;
    • range(97, 123)是小写字母a-z;
    • range(48, 58)是数字0-9;
    • 32是空格;
      • 字符串判断的话,更简单的就是string.isxxxx()里面有很多,可以自己看一下。
  • 对于列表,直接list.sort()就行。

for if 写在一行

一个列表中,先forif

ls =[x for x in a if x % 2 == 0]

排列与组合 permutations, combinations

排列组合是非常常见的两种数学方法,两个函数的语法是

  • permutations(iterable, r) :从len(iterable)中选取r进行排列。
  • combinations(iterable, r) :从len(iterable)中选取r进行组合。
from itertools import permutations, combinations
list(permutations(range(3)))
Out[2]: [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]

list(combinations(range(4), 2))
Out[3]: [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

注意iterable是迭代器,千万要list下转化为列表。

字符串填充补零 rjust、format

刷题时经常会遇到十进制转化为二进制,然后补充至8位长度的字节,这里推荐两种方式,都是字符串的形式。

  • bin(integer)转化为二进制字符串(注意,同时前两位是0b需要去除)。然后再用 str.rjust(width, symbol),用symbol在字符串左边填充至宽度width,举例
a = 15
bin_a = bin(a)
bin_a
Out[4]: '0b1111'

bin_a[2:].rjust(8, '0')
Out[5]: '00001111'
  • 当然还有更简单的方式,"{:08b}".format(int(integer)),这里直接对用字符串中的占位符中的b来表示表示二进制,并用0来补充至8位长度。这里需要注意的几个点:
    • 因为08前面,所以补在前面,也可以写成{:0>8b}这是0补在前面,如果是{:0<8b}就是补在后面。
    • format(int(integer))可以简写成format(integer)效果一样。

去除两个集合中重复元素 ^

利用^排除两个集合的重叠元素(可以得到得到两个列表的对称差)。

list_1 = [1, 2, 1, 4, 6]
list_2 = [7, 8, 2, 1]
list(set(list_1) ^ set(list_2))
out[6]: [4, 6, 7, 8]

对变长数组操作 list

有时候会遇到要对同一个数组不断地迭代操作,例如

arr = [1, 2, 3]
for n in range(2):
	for i in arr:
		print(i)
		arr.append(i + 4)

上述的情况会一直循环下去,对于这样的问题,最简单的方式就是for i in list(arr):将每一次的arr都重新看作一个数组来操作。

你可能感兴趣的:(Python,Python)