各種類型的算法
import copy
# def num():
# return [lambda x, i=i: x*i for i in range(4)]
# print([m(2) for m in num()])
# M(2)是取值得2倍 這個問題涉及到了Python的閉包及延時綁定的知識(Python作用域)。
# 在Python核心編程里,閉包的定義如下:
# 如果在一個內部函數里,對外部作用域(但不是在全局作用域)的變量進行引用,那么內部函數就被認定是閉包。
# 總結為三點:
# 1、是一個內嵌函數
# 2、對外部函數變量引用
# 3、外部函數返回內嵌函數
# 簡單的閉包例子:
# def counter(start_at=0):
# count = [start_at]
# def incr():
# count[0] += 1
# return count[0]
# return incr
# 上面的那道題,可以寫成這樣:
# def func():
# fun_list = []
# for i in range(4):
# def foo(x):
# return x*i
# fun_list.append(foo)
# return fun_list
# for m in func():
# print m(2)
# func()是一個包含四個函數的列表:
# [<function func at 0x00000000021CE9E8>, <function func at 0x00000000021CEA58>, <function func at 0x00000000021CEAC8>, <function func at 0x00000000021CEB38>]
# 當我們執行 m(2) 時,運行到foo()內部函數,發現變量 i 並不是foo()中的變量,於是就到外部函數func中尋找變量 i ,但此時外部的 for 已經循環完畢,最后的 i =3 。所以,每次
# 執行m(2),i 的值都是 3 ,因此,最終結果會是 [6, 6, 6, 6] 。
# 當在foo()中添加 i=i 后,即:
# def func():
# fun_list = []
# for i in range(4):
# def foo(x, i=i):
# return x*i
# fun_list.append(foo)
# return fun_list
# for m in func():
# print m(2)
# 這樣的話,for循環執行時,就已經把 i(0, 1, 2, 3) 的值傳給了foo()函數,此時的 i 已經是foo()函數的內部變量,運行到foo()函數時,就不會到外部函數尋找變量 i ,直接運行
# def num():
# return [lambda x: i * x for i in range(4)]
# print([m(1) for m in num()])
#
#
#
# def num():
# return (lambda x: i * x for i in range(4))
# print([m(2) for m in num()])
# 給定
# nums = [2, 7, 11, 15], target = 9
# # 因為
# nums[0] + nums[1] = 2 + 7 = 9
# # 所以返回
# [0, 1]
# todo 任務
# todo 也可以理解為to do to do 是將要做的事情,還沒做的事情
# def get_list_values(nums, values):
# """
# :param nums傳過來的list
# :param values 和為9
# :returns 索引
# """
#
# for i in nums:
# a = (values - i) # 算出差值減少一次for循環
# j = nums.index(i)
# try:
# k = nums.index(a)
# if j <= k:
# print(j, k)
# except:
# if a == 0:
# print(j)
#
#
# if __name__ == '__main__':
# get_list_values([7, 2, 6, 9, 11, 15], 11)
#
# def get_list_values(nums,values):
# """
# :param nums傳過來的list
# :param values 和為9
# :returns 索引
# """
# for i in nums:
# a=(values-i)#算出差值減少一次for循環
# j=nums.index(i)
# if a!=0: #值為不為9
# if a in nums: #in的時間復雜度為1
# k=nums.index(a)
# if j<=k:#去重
# print(j,k)
# else:
# print(j)
#
# if __name__ == '__main__':
# get_list_values([7,2,6,9,11,15],11)
# def get_index(nums, target):
# """
# :param nums:傳的參數列表
# :param target:目標值
# :return:索引值列表
# """
# index_dict={
#
# }
# for index,num in enumerate(nums):
# tem=target-num
# tem_index=index_dict.get(tem,'')
# if tem_index:
# print(tem_index,index)
# # return [tem_index,index]
# else:
# index_dict[num]=index
#
# if __name__ == '__main__':
# pp = get_index([2, 4, 5, 8, 1, 11, 4, 15, 7], 9)
# print(pp)
# 判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
# 示例 1:
# 輸入: 121 輸出: true
# 示例 2:
# 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數。
#
# 示例 3:
# 輸入: 10 輸出: false 解釋: 從右向左讀, 為 01 。因此它不是一個回文數。
# def rev(num):
# """
# :param num:
# :return:
# """
# n=str(num)
# if num == int(n[::-1]):
# return True
# else:
# return False
#
# if __name__ == '__main__':
# a=rev(111)
# print(a)
# k = [1,2,3,4,5]
# n=copy.copy(k)
# print(f'{k}')
# print(f'{n}')
# print('-----------')
# k[3].append('231')
# print(f'{k}')
# print(f'{n}')
# 正常邏輯的深拷貝淺拷貝
# k=[1,2,3,4,['a','b']]
# c=copy.copy(k)
# k[4].append('c')
# print(k,c)
# print(k)
# print(id(k[4]))
# f=copy.deepcopy(k)
# print(id(k[4]),id(c[4]),id(f[4]))
## 迭代器:
# class FeiBo():
# def __init__(self,n):
# self.a = 1
# self.b = 1
# self.c = 0
# self.n = n
#
# def __iter__(self):
# return self
#
# def __next__(self):
# if self.c < self.n:
# r = self.a
# self.a,self.b = self.b, self.a+self.b
# self.c+=1
# return r
# else:
# raise StopIteration
#
# f=FeiBo(9)
# for i in f:
# print(i)
#
# ## 生成器:
#
# def FeiBo(n):
# a=1
# b=1
# for i in range(n):
# yield a
# a,b=b,a+b
# f=FeiBo(10)
# for i in f:
# print(i)
# 在一個長度為n的數組nums里的所有數字都在0-n-1的范圍內,請找出數組中任意一個重復的數字
# class Son:
# def fint(self,nums: list[int]) -> int:
# dict={}
# for i in nums:
# if dict.get(i,''):
# return i
# else:
# dict[i]=1
# if __name__ == '__main__':
# fint[2,3,4,5,2,2,3]
def grt_nums(nums):
"""
:param nums: 傳的值
:return: 返回重復的數
"""
for i in nums:
a= nums.count(i)
if a >=2:
print(a)
if __name__ == '__main__':
grt_nums([2,3,4,5,2,2,3,3])
'''
Stack() 創建一個新的空棧
push(item) 添加一個新的元素item到棧頂
pop() 彈出棧頂元素
peek() 返回棧頂元素
is_empty() 判斷棧是否為空
size() 返回棧的元素個數
'''
# class Stack:
# def init(self):
# #設定一個空棧
# self.stack = []
# def push(self,item):
# self.stack.append(item)
# def pop(self):
# #棧的特性 尾部刪除,尾部添加
# if self.stack ==[]:
# return None
# else:
# self.stack.pop(-1)
# def peek(self):
# #返回棧頂元素
# if self.stack ==[]:
# return None
# else:
# return self.stack[-1]
# def is_empty(self):
# # 判斷是否為空
# return self.stack ==[]
# def size(self):
# #返回棧內元素的個數
# return len(self.stack)
# def get_num(par_str):
# """
# :param par_str: 字符串
# :return: num
# """
# par_list = par_str.split(' ')
#
# # print([i for i in par_list if i])
# # for i in par_list:
# # if "" in par_list:
# # par_list.remove("")
# # print(par_list)
# if __name__ == '__main__':
# get_num('hello, python hello , world')
# 字符串相乘
# 給定兩個以字符串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式
# 示例 :
# 輸入: num1 = "123", num2 = "456"
# 輸出: "56088"
# def cheng(num1,num2):
# i1=""
# i2=""
# for i in num1:
# if i.isdigit():
# i1+=i
# for j in num2:
# if j.isdigit():
# i2+=j
# str1=str(int(i1)*int(i2))
# return str1
# if __name__ == '__main__':
# print(cheng('1122a','a133221aaaa'))
# def chong(llist):
# for index,i in enumerate(llist):
# i.get(i,"")
#
#
# if __name__ == '__main__':
# print(chong([1,2,3,4,5,3,2]))
# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options
#
# chrome_options = Options()
# # chrome_options.add_argument('--headless') #不顯示界面頭等信息
# # chrome_options.add_argument('--disable-gpu')
# browser = webdriver.Chrome(chrome_options=chrome_options)
# browser.get("http://chinafoods.com.cn/")
# browser.find_element_by_id('sybm').send_keys("123456")
# browser.find_element_by_name("btncx").click()
python反轉字符串
'''第一種:使用字符串切片''' s = 'Hello World' print(s[::-1]) # dlroW olleH '''第二種:使用列表的reverse方法''' l = list(s) l.reverse() print( "".join(l) ) # dlroW olleH '''第三種:使用reduce''' from functools import reduce result = reduce(lambda x,y:y+x,s) print( result ) # dlroW olleH