Python实用技巧--math篇

  • average

返回两个或多个数字的平均值。

def average(*args):
  return sum(args, 0.0) / len(args)

示例

average(*[1, 2, 3]) # 2.0
average(1, 2, 3) # 2.0
  • average_by

使用提供的函数将每个元素映射到一个值后,返回列表的平均值。

def average_by(lst, fn=lambda x: x):
  return sum(map(fn, lst), 0.0) / len(lst)

示例

average_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda x: x['n']) # 5.0
  • clamp_number

在边界值a和b所指定的范围之内钳制num。如果num在该范围内,则返回num。否则,返回范围内最接近的数字。

def clamp_number(num,a,b):
  return max(min(num, max(a,b)),min(a,b))

示例

clamp_number(2, 3, 5) # 3
clamp_number(1, -1, -5) # -1
  • digitize

将数字转换为数字数组。

def digitize(n):
  return list(map(int, str(n)))

示例

digitize(123) # [1, 2, 3]
  • factorial

计算数字的阶乘。

def factorial(num):
  if not ((num >= 0) and (num % 1 == 0)):
    raise Exception(
      f"Number( {num} ) can't be floating point or negative ")
  return 1 if num == 0 else num * factorial(num - 1)

示例

factorial(6) # 720
  • fibonacci

生成一个数组,其中包含斐波那契序列,直到第n项。

def fibonacci(n):
  if n <= 0:
    return [0]

  sequence = [0, 1]
  while len(sequence) <= n:
    next_value = sequence[len(sequence) - 1] + sequence[len(sequence) - 2]
    sequence.append(next_value)

  return sequence

示例

fibonacci(7) # [0, 1, 1, 2, 3, 5, 8, 13]
  • gcd

计算数字列表的最大公约数。

from functools import reduce
import math

def gcd(numbers):
  return reduce(math.gcd, numbers)

示例

gcd([8,36,28]) # 4
  • in_range

检查给定数字是否在给定范围内

def in_range(n, start, end = 0):
  if (start > end):
    end, start = start, end
  return start <= n <= end

示例

in_range(3, 2, 5); # True
in_range(3, 4); # True
in_range(2, 3, 5); # False
in_range(3, 2); # False
  • is_divisible

检查第一个数字参数是否可被第二个参数整除。

def is_divisible(dividend, divisor):
  return dividend % divisor == 0

示例

is_divisible(6, 3) # True
  • is_even

如果给定数字为奇数,则返回True,否则返回False。

def is_odd(num):
  return num % 2 != 0

示例

is_odd(3) # True
  • is_odd

如果给定数字为奇数,则返回True,否则返回False。

def is_odd(num):
  return num % 2 != 0

示例

is_odd(3) # True
  • lcm

返回两个或多个数字的最小公倍数。

from functools import reduce
import math

def spread(arg):
  ret = []
  for i in arg:
    if isinstance(i, list):
      ret.extend(i)
    else:
      ret.append(i)
  return ret

def lcm(*args):
  numbers = []
  numbers.extend(spread(list(args)))

  def _lcm(x, y):
    return int(x * y / math.gcd(x, y))

  return reduce((lambda x, y: _lcm(x, y)), numbers)

示例

lcm(12, 7) # 84
lcm([1, 3, 4], 5) # 60
  • max_by

使用提供的函数将每个元素映射到一个值后,返回列表的最大值。

def max_by(lst, fn):
  return max(map(fn,lst))

示例

max_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda v : v['n']) # 8
  • median

查找数字列表的中位数。

def median(list):
  list.sort()
  list_length = len(list)
    if list_length%2==0:
  return (list[int(list_length/2)-1] + list[int(list_length/2)])/2
  else:
    return list[int(list_length/2)]

示例

median([1,2,3]) # 2
median([1,2,3,4]) # 2.5
  • min_by

使用提供的函数将每个元素映射到一个值后,返回列表的最小值。

def min_by(lst, fn):
  return min(map(fn,lst))

示例

min_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda v : v['n']) # 2
  • rads_to_degrees

将角度从弧度转换为度。

import math

def rads_to_degrees(rad):
  return (rad * 180.0) / math.pi

示例

import math
rads_to_degrees(math.pi / 2) # 90.0
  • sum_by

使用提供的函数将每个元素映射到一个值后,返回列表的总和。

def sum_by(lst, fn):
  return sum(map(fn,lst))

示例

sum_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda v : v['n']) # 20

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值