python实用小技巧

  • 检查重复元素

    • def all_unique(lst):
          return len(lst) == len(set(lst))
      
  • 变位词

    • # 检测两个字符串是否为变位词
      from collections import Counter
      def anagram(first, second):
          return Counter(first) == Counter(second)
      
  • 检查内存使用情况

    • import sys
      variable = 30
      print(sys.getsizeof(variable))
      
      # 计算当前代码所使用的内存和时间
      import os
      import time
      import psutil
      from contextlib import contextmanager
      @contextmanager
      def timer_memory(name):
          t0 = time.time()
          yield
          print(f"Memory: {(psutil.Process(os.getpid()).memory_info().rss/2**30):.02f}GB")
          print(f"{name} done in {time.time-t0:.0f}s")
      
      # 使用方法
      with timer_memory('Reading data'):
          '''
          code
          '''
      
  • 字节大小计算

    • def byte_size(string):
          return (len(string.encode(utf-8)))
      
  • 首字母大写

    • s = ''
      s.title()
      
  • 分块

    • # 数据分块,将列表分为指定大小
      import math
      def chunk(lst, size):
          return list(map(lambda x: lst[x*size:x*size+size], list(range(0, math.ceil(len(lst)/size)))))
      
  • 压缩

    • # 使用filter删除列表中的错误值或者指定值
      def compact(lst):
          return list(filter(bool, lst))
      
  • 间隔数

    • # 转换二维数组
      arr = [[1,2],[3,4],[5,6]]
      transposed = zip(*arr)	# --> [(1,3,5), (2,4,6)]
      
  • 计算字符串中元音字母数

    • import re
      def count_vowels(strs):
          return len(len(re.findall(r[aeiou], strs, re.IGNORECASE)))
      
  • 平面化

    • # 将列表中的列表去除
      def spread(arg):
          ret = []
          for i in arg:
              ret.extend(i) if isinstance(i, list) else ret.append(i)
          return ret
      def deep_flatten(lst):
          res = []
          res.extend(spread(list(map(lambda x:deep_flatten(x) if type(x)==list else x, lst))))
          return res
      # [1, [2,3], [[4],[5]], 6] --> [1,2,3,4,5,6]
      
  • 差异

    • # 返回两个迭代器中差异的值
      def difference(a, b):
          set_a = set(a)
          set_b = set(b)
          comparison = set_a.difference(set_b)
          return list(comparison)
      
  • 寻找差异

    • def difference_by(a, b, fn):
          b = set(map(fn, b))
          return [item for item in a if fn(item) not in b]
      
  • 合并两个字典

    • # 方法1
      def merge_two_dicts(a, b):
          c = a.copy()
          c.update(b)
          return c
      # 方法2, python>=3.5
      def merge_two_dicts(a, b):
          return {**a, **b}
      
  • 将列表转化为字典

    • def to_dict(keys:list, values:list):
          return dict(zip(keys, values))
      
  • Try else 指令

    • try:
          c = 2*3
      except TypeError:
          print('An exception was raised !')
      else:
          print('no exception !')
      
  • 返回列表中重复出现最多的元素

    • def most_frequent(lst):
          return max(set(lst), key=lst.count)
      
  • 回文

    • def palindrome(string):
          import re
          s = re.sub([W_],  , string.lower())
          return s == s[::-1]
      
  • 简单计算器

    • import operator
      action = {'+': operator.add, 
                '-': operator.sub, 
                '/': operator.truediv, 
                '*': operator.mul, 
                '**': pow}
      print(action['-'](50, 25))
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值