华为笔试可能用到的一些方法、函数

# 华为机试初始化
while True:
    try:
        pass
    except:
        break

# 判断英文 or 数字 or 空格
i=''
i.isalpha() or i.isdigit() or i.isspace()

# list转换成str
def list2str(li):
    s=''.join(li)
    return s

# str转换成list
def str2list(s):
    l=[v for v in s]
    return l

# 遍历,每次读一行
import sys

while True:
    try:
        string = sys.stdin.readline().strip()
    except:
        break

# 二分查找(li为有序数列,num为查找的数)
def er_fen(li, num):
    start = 0
    end = len(li) - 1
    while start <= end:
        mid = (start + end) // 2
        if li[mid] == num:
            return mid # 返回所在位置
        elif li[mid] > num:
            end = mid - 1
        else:
            start = mid + 1
    return -1

# 字典-->元祖list[(),(),()]
# 注意dic.items()得到的元祖与dic顺序不一致,若想稳定排序,不要转换成字典,直接自己组成元祖list
dic={'a': 1, 'b': 3, 'c': 2}#字典
res=sorted(dic.items(),key = lambda x:x[0])#(dic.items()是元祖)按字典的key排序,返回元祖
res=sorted(dic.items(),key = lambda x:x[1],reverse=True)#按字典的value排序(倒序)



# 求最大公约数(辗转相除法)
def gcd(num1,num2):
    if num2==0:
        return num1
    return gcd(num2, num1 % num2)

# 求最小公倍数
def lcm(num1,num2):
    return num1*num2/gcd(num1,num2)

# 十进制转二进制
s='4'
bin_num = bin(int(s))[2:]  # '4'-->'100'

# 十进制转十六进制
s='4'
hex_num = hex(int(s))[2:]  # '10'-->'a'

# 十六进制转二进制
s='a'# 或者'A'
bin_num = bin(int('0x'+s, 16))[2:] # 'a' or 'A'-->'1010'

# 十六进制转十进制
int('0x96', 16)

# 二进制转十进制
int('1101',2)

# 二进制转十六进制
hex(int('1101',2))[2:]

# 八进制 oct() ,表示形式0o2637

# 字符串的全排列(输出为list)
def str_sort(s):
  if len(s) <= 1:
    return [s]
  str_list = []
  for i in range(len(s)):
    for j in str_sort(s[0:i] + s[i + 1:]):
      str_list.append(s[i] + j)
  return str_list

#返回一个列表的全排列的列表集合[[1, 2, 3], [1, 3, 2]...]
def permutation(nums, p, q):
    if p == q:
        s.append(list(nums))
    else:
        for i in range(p, q):
            nums[i], nums[p] = nums[p], nums[i]
            permutation(nums, p+1, q)
            nums[i], nums[p] = nums[p], nums[i]

s= []
nums = [1,2,3]
permutation(nums, 0, len(nums))
print(s)

# 判断质数
def is_zhishu(num):
    if num<=1:
        return False
    flag=True
    for i in range(2,num//2+1):
        if num%i==0:
            flag=False
    return flag

# 二分查找
def er_fen(li,value):
    start=0
    end=len(li)-1
    while start<=end:
        mid = (start + end) // 2
        if value<li[mid]:
            end=mid
        elif value>li[mid]:
            start=mid+1
        else:
            return mid
    return False

# 字符串翻转
s='abc'
s[::-1]#'cba'

# 保留1位有效数字
num=3.1415926
print('%.1f' % (num)) # 3.1

# 小写字母转大写(大写字母ASCII码小,相差32)
s='a'  # s.upper()
chr(ord(s)-32)

# 大写字母转小写(大写字母ASCII码小,相差32)
s='A'  # s.lower()
chr(ord(s)+32)

# 数组去重(1)
def remove_same_list(l, flag=0): # flag==1保持原有list顺序,默认==0从小到大排序
    formatList = list(set(l))
    if flag==1:
        formatList.sort(key=l.index)  # 加上这句话保持原始list顺序不变
    return formatList

# 数组去重(2)
def remove_same(l):
    new_l=[]
    for i in l:
        if i not in new_l:
            new_l.append(i)
    return new_l


# 最后答案如果是list或者str的话,改成如下输出方式
ans = [1, 2, 3]#或者"123"
for i in range(len(ans)):
    if i == len(ans)-1:
        print(ans[i])
    else:
        print(ans[i], end=" ")

# 最长公共子串
def getCommonStrLength(str1, str2):
    if len(str1) < len(str2):
        s1, s2 = str1, str2
    else:
        s1, s2 = str2, str1
    max_len = 0
    for i in range(1, len(s1) + 1):  # s1字符串分割可能的长度
        flag = 0
        for j in range(len(s1)):  # s1字符串的游标
            if s1[j:i + j] in s2 and i + j <= len(s1):  # s1[j:i + j]为最长公共子串
                max_len = i
                flag = 1
                break
        if flag == 0:
            return max_len
    return max_len

你可能感兴趣的:(笔试及面试,华为笔试)