输出形式:
第一种:print(’:.2f’).format(…)
print('{0},{1}'.format('zhangk', 32))
print('{},{},{}'.format('zhangk','boy',32))
print('{name},{sex},{age}'.format(age=32,sex='male',name='zhangk'))
# 格式限定符
# 它有着丰富的的“格式限定符”(语法是{}中带:号),比如:
# 填充与对齐
# 填充常跟对齐一起使用
# ^、<、>分别是居中、左对齐、右对齐,后面带宽度
# :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
print('{:>8}'.format('zhang'))
print('{:0>8}'.format('zhang'))
print('{:a<8}'.format('zhang'))
print('{:p^10}'.format('zhang'))
#输出:
# zhang
#000zhang
#zhangaaa
#ppzhangppp
# 精度与类型f
# 精度常跟类型f一起使用
print('{:.2f}'.format(31.31412))
# 其他类型
# 主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制
print('{:b}'.format(15))
print('{:d}'.format(15))
print('{:o}'.format(15))
print('{:x}'.format(15))
# 用逗号还能用来做金额的千位分隔符
print('{:,}'.format(123456789))
第二种:
print(’%2f’%…)
%d就是普通的输出了
% 2d是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格。
% 02d,和% 2d差不多,只不过左边补0
%.2d 输出整形时最少输出2位,如不够前面以0占位。如输出2时变成02。200时只输出200;输出浮点型时(%.2f)小数点后强制2位输出
小数点的保留
a = 1
b = 3
print(a/b)
#方法一:
print(round(a/b,2))
#方法二:
print(format(float(a)/float(b),'.2f'))
#方法三:
print ('%.2f' %(a/b))
示例
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
方法一:暴力法,时间复杂度超过 O(log(m + n)),应该是
把两个列表合并为一个列表,去掉重复元素,用普通方法求中位数。
array1=list(int(x) for x in input().split())
array2=list(int(x) for x in input().split())
print(array1)
print(array2)
"""
list_new=[]
for i in range(len(array1)):
list_new.append(array1[i])
for i in range(len(array2)):
list_new.append(array2[i])
"""
list_new=array1+array2#直接相加即可
#list_new=list(set(list_new))#去掉重复元素,本题不用去掉
list_new.sort()
print(list_new)
def findmedium(list):
if len(list)%2==1:
value=list[len(list)//2]
else:
value=round((list[len(list)//2-1]+list[len(list)//2])/2,1)
return value
print('{:.1f}'.format(findmedium(list_new)))
方法二:
看到log,想到的应是二分法,具体步骤可看解析
A=list(int(i) for i in input().split())
B=list(int(i) for i in input().split())
print(A)
print(B)
def median(A,B):
m=len(A)
n=len(B)
if m>n:
A,B,m,n=B,A,n,m
#if n == 0:
# raise ValueError
i_min,i_max=0,m
half=(m+n+1)//2#错误点:python3中应该//
while i_min<=i_max:#错误点:遗漏
i = (i_min + i_max) // 2
j = half - i
if i > 0 and A[i - 1] > B[j]:#j<n
i_max = i - 1
elif i < m and B[j - 1] > A[i]:#j>0
i_min = i + 1
else:
if i == 0:
max_of_left = B[j - 1]
elif j == 0:
max_of_left = A[i - 1]
else:
max_of_left = max(A[i - 1], B[j - 1])
if (m + n) % 2 == 1:#错误点:应该将奇数情况放到前面,否则out of range
return max_of_left
if i == m:
min_of_right = B[j]
elif j == n:
min_of_right = A[i]
else:
min_of_right = min(A[i] , B[j])#错误点:语法错误
return (max_of_left + min_of_right) / 2.0#注意点:2.0
print(median(A,B))