#!usr/bin/python
# -*- coding: utf-8 -*-# 字符串去重后排序
from functools import reduces = "sheckjffs"
str_list = list(set(s))
str_list.sort()
s = "".join(str_list)
print(s)# 列表扩展
a = [2, 4, 7, 1]
b = [4, 6, 8, 3]
a.extend(b)# 冒泡排序
def bubbleSort(arr):n = len(arr)for i in range(n):for j in range(0, n - i - 1):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]return arrbubbleSort(a)
# 列表获取偶数位元素
a = [1, 2, 3, 4]
b = [i for i in a if i % 2 == 1]
print(b)# 字典删除元素合并字典
a = {"a": "b", "c": "d"}
a.pop("a")
b = {"e": "f"}
a.update(b)
print(a)# 下列输出是啥
def test_1(x, y, z):if x > 0 and y == 0:z = z + xreturn zelif x == 2 or z > 1:return z + 1else:return zdef add(n, i):return n + idef test():for i in range(4):yield ig = test()for n in [1, 10, 5]:g = (add(n, i) for i in g)print("===========")
print(list(g))# 所有的结果都是生成器表达式,不调用它,不从里面取值就不会取值
# 当n=1时,g=(add(1, i) for i in g),其中g=test()即g =(add(1, i) for i in test()) 结果是1,2,3,4
# 当n=10时,括号里边的g是上一次循环结束时的g,即括号中的g g =(add(1, i) for i in test()),
# 括号外的g=(add(10, i) for i in (add(10, i) for i in test()))n = 1
g = (add(n, i) for i in test())
print(next(g))
# print(list(g)) # [1, 2, 3, 4]n = 10g = (add(n, i) for i in (add(n, i) for i in test()))# print(list(g)) # [20, 21, 22, 23]
n = 5g = (add(n, i) for i in (add(n, i) for i in (add(n, i) for i in test())))g = (add(n, i) for i in (add(n, i) for i in (5, 6, 7, 8)))g = (add(n, i) for i in (10, 11, 12, 13))g = (15, 16, 17, 18)
L = [1, 2, 3, 5, 6]
B = "".join([str(i) for i in L])
# ls cd pwd mv cp touch mkdir cat wc su rm -rf kill -9 ifconfig# 给列表中的字典排序:假设有如下 list 对象
alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}]# 将 alist 中的元素按照 age 从大到小排序。# 答:利用list的内置函数sort来进行排序alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}]
alist.sort(key=lambda x: x['age'], reverse=True)
print(alist)
# 将a,b he为字典
a = ['a', 'b', 'c', 'd', 'e']
b = [1, 2, 3, 4, 5]
c = dict(zip(a, b))
print(c)# zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
# 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。# selenium 中难点介绍:1.多级frame,2.元素等待,使用WebDriverWait和expected_conditions 进行循环等待查找元素,超时就退出。3.下载框不属于浏览器的需要用
# PyuserInput中的pykeyboard进行处理4.selenium 无法处理的一些操作使用execute_js执行js操作来进行滚动条等操作def binary_search1(alist, target):low = 0hight = len(alist)while low < hight:mid = int((low + hight) / 2)guess = alist[mid]if guess == target:return midelif guess > target:hight = midelif guess < target:low = mid + 1return -1# def binary_search(alist, target, low, high):
# mid = int((low + high) / 2)
# if alist[mid] == target:
# return mid
# elif alist[mid] < target:
# return binary_search(alist, target, mid, high)
# elif alist[mid] > target:
# return binary_search(alist, target, low, mid)# 二进制和十进制转换
def ten_to_bin(num):'''十进制转二进制,取余数,然后余数到过来:param num::return:'''result = ''while num != 0:yu = num % 2num = num // 2print(num, yu)result = str(yu) + resultreturn resultdef bin_to_ten(num):'''二进制转十进制,对应位置数字乘以2的(n-i-1)次方,n为数字长度:param num::return:'''n = len(str(num))result = 0for i in range(n):result = result + int(2 ** (n - i - 1)) * int(str(num)[i])return resultprint("============5252=======")
print(ten_to_bin(21))
print(bin_to_ten(10101))
# 字典按照键或值排序
my_dict = {'lilee': 25, 'age': 24, 'phone': 12}
print(dict(sorted(my_dict.items(), key=lambda x: x[0])))
print(dict(sorted(my_dict.items(), key=lambda x: x[1])))
# 计算两个日志之间相隔天数
import time
import sysdef dateinput():date = input('please input the first date: ')return datedef datetrans(tdate):spdate = tdate.replace("/", "-")try:datesec = time.strptime(spdate, '%Y-%m-%d')except ValueError:print"%s is not a rightful date!!" % tdatesys.exit(1)return time.mktime(datesec)def daysdiff(d1, d2):daysec = 24 * 60 * 60return int((d1 - d2) / daysec)# date1 = dateinput()
# date2 = dateinput()
# date1sec = datetrans(date1)
# date2sec = datetrans(date2)
# print("The number of days between two dates is: ", daysdiff(date1sec, date2sec))"""设计一个函数,对传入的字符串(假设字符串中只包含小写字母和空格)进行加密操作,
加密的规则是a变d,b变e,c变f,……,x变a,y变b,z变c,空格不变,返回加密后的字符串"""def caesar_encrypt(string):base = ord('a')encrypted_string = ''for ch in string:if ch != ' ':curr = ord(ch)diff = (curr - base + 3) % 26ch = chr(base + diff)encrypted_string += chreturn encrypted_stringdef main():print(caesar_encrypt('attack at dawn')) # dwwdfn dw gdzqprint(caesar_encrypt('dinner is on me')) # glqqhu lv rq phmain()
"""设计一个函数,生成指定长度的验证码(由数字和大小写英文字母构成的随机字符串)"""from random import randrangedef generate_code(length=4):all_chars = 'abcdefghijklmnopqrstuvwxyzABDEFGHIJKLMNOPQRSTUVWXYZ0123456789'all_chars_len = len(all_chars)code = ''for _ in range(length):index = randrange(all_chars_len)code += all_chars[index]return code# 剑指offer)输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
# #
# # 思路:选定第一个数字,然后遍历后面的数字求和并与S比较,需要n-1次,不行的话再选定第2,3,,,n个数字,需要n^2次,时间复杂度比较高。
# # 更简单的方法可以是定义两个指针,第一个指向第一个元素,第二个指向最后一个元素,两个元素相加,如果等于S则输出这两个元素,如果大于,
# # 则将第二个指针向前移一位,再求和进行比较;如果小于,则将第一个指针向前移一位,再进行求和比较。
def get_num(data, sum_num):if not data or not sum_num:return []i = 0j = len(data) - 1result = []while i < len(data) and j > 0:if data[i] + data[j] == sum_num:result.append((data[i], data[j]))elif data[i] + data[j] > sum_num:j = j - 1elif data[i] + data[j] < sum_num:i = i + 1return result# 查询同名学生信息
# select * from student where name in (select name from student group by name having count(name)>1);# 实现栈结构
class Stack(object):# 初始化栈为空列表def __init__(self):self.items = []# 判断栈是否为空,返回布尔值def is_empty(self):return self.items == []# 返回栈顶元素def peek(self):return self.items[len(self.items) - 1]# 返回栈的大小def size(self):return len(self.items)# 入栈def push(self, item):self.items.append(item)# 出栈def pop(self):return self.items.pop()# 选择排序,选择一个数作为最小数的下标,然后拿这个数依次跟其他数进行对比,如果有比它小的数,就记录下那个值的下标,然后进行元素互换
def select_sort(alist):n = len(alist)for i in range(n):min = ifor j in range(i + 1, n):if alist[j] < alist[i]:min = jalist[min], alist[i] = alist[i], alist[min]return alistprint(select_sort([1, 5, 7, 2, 3, 6, 9, 77]))# 文件中有三个字段,时间2020-08-12,userid,访问次数,求每个用户每个月访问的次数的和
def get_visit_time_by_month(month):dict_visit = {}with open("a.txt", "r")as f:for line in f.readlines():time, user_id, count = line.split(" ")month1 = time[4:6]if month1 == month:if user_id in dict_visit.keys():dict_visit[user_id] = dict_visit[user_id] + countelse:dict_visit[user_id] = countreturn dict_visitalist = [1, 2, 5, 9, 11, 15, 52]# target = binary_search(alist, 52, 0, len(alist) - 1)
# print(target)# 可变类型做默认参数,可变类型值一直增加
def f(x, l=[]):print("===============%s" % id(l))print(l)for i in range(x):l.append(i * i)print("结束后%s" % l)f(2)
f(3, [3, 2, 1])
f(3)
f(3)
# ===============12139056
# []
# 结束后[0, 1]
# ===============51299512
# [3, 2, 1]
# 结束后[3, 2, 1, 0, 1, 4]
# ===============12139056
# [0, 1]
# 结束后[0, 1, 0, 1, 4]
# ===============12139056
# [0, 1, 0, 1, 4]
# 结束后[0, 1, 0, 1, 4, 0, 1, 4]
# Python 是强类型的动态脚本语言
# 打印结果说出理由
l = []
for i in range(10):l.append({'num': i})
print(l)l = []
a = {'num': 0}
for i in range(10):a['num'] = il.append(a)
print(l)# 一句话解决阶乘函数
def get_jiecheng(n):reduce(lambda x, y: x * y, range(1, n + 1))print("++++++++++++++")# fibnaci数列
def fib(n):alist = [0, 1]for i in range(1, n):alist.append(alist[i] + alist[i - 1])return alistdef fib2(n):alist = [1, 1]if n < 1:return -1if n == 1 or n == 2:return 1if n > 2:return fib2(n - 1) + fib2(n - 2)print(fib(10))
print([fib2(i) for i in range(1, 11)])# 单例模式
class single:_instance = Nonedef __new__(cls, *args, **kwargs):if not hasattr(cls, "_instance"):cls._instance = object.__new__(cls)return cls._instance# 二分查找
def twofind(n, l):min = 0max = len(l)if n in l:while True:mid = int((max + min) / 2)if n > l[mid]:min = midelif n < l[mid]:max = midelse:if n == l[mid - 1]:return (mid - 1)else:return (mid)else:return -1'''
求两个字符串的最长公共子串
思想:建立一个二维数组,判断对应位置是否相等,相等记为1,最后数这个数组对角线上为1的最大长度
'''def getNumofCommonSubstr(str1, str2):lstr1 = len(str1)lstr2 = len(str2)record = [[0 for i in range(lstr2 + 1)] for j in range(lstr1 + 1)] # 多一位maxNum = 0 # 最长匹配长度p = 0 # 匹配的起始位for i in range(lstr1):for j in range(lstr2):if str1[i] == str2[j]:# 相同则累加record[i + 1][j + 1] = record[i][j] + 1if record[i + 1][j + 1] > maxNum:# 获取最大匹配长度maxNum = record[i + 1][j + 1]# 记录最大匹配长度的终止位置p = i + 1# print(record)return str1[p - maxNum:p], maxNumstr1 = 'abcdef'
str2 = 'mcdea'res = getNumofCommonSubstr(str1, str2)
print(res)# 求质因数
def get_zhi(num):alist = []while num > 1:for i in range(2, num + 1):if num % i == 0:alist.append(i)num = int(num / i)if num == 1:breakreturn alistprint(get_zhi(20))# 打印函数执行时间装饰器
def get_exec_time(fun):def wapper(*args,**kwargs):start_time= time.time()fun(*args,**kwargs)end_time = time.time()print(end_time-start_time)return wapper