# 1.寻找中数组中第二小的元素
def match_secend_min(arr):
arr.sort()
return arr[1] if len(arr) > 1 else ""
print(match_secend_min([5,5,5]))
# 2.找到数组中第一个不重复出现的整数
def match_fisrt_same(arr):
cursor = arr[0]
for i in range(1, len(arr)):
if cursor!=arr[i]:
return arr[i]
print("[2].", match_fisrt_same([1,1,1,1,1,3,"4", 4, 5,"a", "c", "c"]))
# 3.合并两个有序数组
def collection_arr(arr1, arr2):
arr3 = arr1 + arr2
arr3.sort()
return arr3
print(collection_arr([6,7,8], [2,3,4]))
# 如何判断一个数组是对称数组:
# 要求:判断数组元素是否对称。例如[1,2,0,2,1],[1,2,3,3,2,1]这样的都是对称数组
def find_mirro(arr):
if len(arr)%2 == 0:
newarr = arr[int(len(arr) / 2):]
newarr.reverse()
for i, j in zip(arr[: int(len(arr)/2)], newarr):
if arr[i] != arr[j]:
return False
else:
newarr = arr[int((len(arr) + 1) / 2):]
newarr.reverse()
for i, j in zip(arr[: int((len(arr)-1)/2)], newarr):
if arr[i] != arr[j]:
return False
return True
arr = [1,2,0,2,1]
print(find_mirro(arr))
# 冒泡算法(从小到大)
def mao_pao(arr):
for i in range(len(arr)):
for j in range(len(arr)-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
print(mao_pao([5,4,6,2,3,1,1]))
# !!!字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串 aabcccccaaa 会变为 a2b1c5a3 。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母
def yasuo(string):
ys_str = ""
num = 1
cursor = string[0]
for i in range(1, len(string)):
if string[i] == cursor:
num += 1
else:
ys_str = ys_str + str(cursor) + str(num)
cursor = string[i]
num = 1
else:
ys_str = ys_str + str(cursor) + str(num)
yy = ys_str[1::2]
if set(yy) == {"1"}:
return string
return ys_str
print(yasuo("abb979caa"))
# 一行代码通过filter和lambda函数输出以下列表索引为奇数对应的元素list_a =[12,213,22,2,2,2,22,2,2,2,32]
#[213,2,2,2,2]
list_a =[12,213,22,2,2,2,22,2,2,2,32]
a = [y for y in filter(lambda x: x[0]%2 == 1, [(key, value) for key, value in enumerate(list_a)])]
b = [value for index, value in enumerate(list_a) if index % 2 == 1]
print(a)
print(b)
# [1,2,3,4,5] 输出 [1,4.9,16,25]
print("map函数使用", list(map(lambda x: x**2, [1,2,3,4,5])))
print("sorted函数开始", list({"name": "lgq", "age": 18, "city": "深圳市", "tel": "134277"}.items()))
print("sorted函数使用", sorted({"name": "lgq", "age": 18, "city": "深圳市", "tel": "134277"}.items(), key=lambda i: i[0], reverse=False))
# 1,2,3,4,5能够组成多少个互不相同的无重复的四位数
a = [1, 2, 3, 4, 5]
fit_list = []
for i in range(1000, 10000):
if len(set(str(i))) != 4:
continue
for j in str(i):
if int(j) not in a:
break
else:
fit_list.append(i)
print("--", len(fit_list))
# 集合运算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print("差集", set1 - set2)
print("交集", set1 & set2)
print("并集", set1 | set2)
print("对称差集", set1 ^ set2)
# 如何生使用一行代码实现生成【1,4,9,16,25,36,49,64,81,100】
a = [i**2 for i in range(1, 11)]
print("-", a)
'''请尽量用简洁的方法把二维数组转换成一维数组例如:
转换前
lst = [[1,2,3],[4,5,6],[7,8,9]]转换后
lst =[1,2,3,4,5,6,7,8,9]
'''
lst = [[1,2,3],[4,5,6],[7,8,9]]
a = []
c = [a.extend(i) for i in lst]
print("x", a)
lst2 = sum(lst, [])
print("x", lst2)
# [1,1,2,3,5,8,13]
def fblq(range_int):
pre = 1
cur = 0
for i in range(1, range_int):
pre, cur = cur, pre + cur
yield cur
print(list(fblq(10)))
# sys.getrefcount( )函数可以获得对象的当前引用计数
import sys
print("引用计数", sys.getrefcount(a))
print(list("1234567890"[0:5:2]))
import re
string = "test123456"
pattern = "(.*?)"
result = re.search(pattern, string)
print(result.group())
# 找出两个字符串最大相同的
# adb12345eed
# tyadt345tytr
def match_max(str1, str2):
cursor = 0
max_str = ""
if len(str1) > len(str2):
str1, str2 = str2, str1
for i in range(1, len(str2)):
if str1.find(str2[cursor: i])!=-1:
if cursor < i and len(str2[cursor: i])>1:
max_str = str2[cursor: i]
else:
cursor = i
if max_str:
yield max_str
max_str = ""
else:
if max_str:
yield max_str
print(list(match_max("Tadb12345tytr", "adb12344yttytr")))
# a
a = "not 404 50.6 found 张三 99 深圳"
pattern = re.compile(r"\d+\.?\d+|\d+|[a-zA-Z0-9]+")
result = pattern.findall(a)
print(result)
算法练习~第一天
最新推荐文章于 2024-08-02 23:27:55 发布