每天Python学习--max,min,memoryview,next,oct

  • max(iterable,key,default):返回可迭代对象的最大值,这里我们来测试下字符串,列表,元组以及字典,数组来看看该函数,min函数与之对应
list_a=[1,2,3,4]
str_a='1,2,3,4'
tuple_a=(1,2,3,4)
dict_a={1:1,2:'aaa',3:'c',5:'aaa',7:1}
array_a=[(1,2),(3,4),(5,7)]
max(list_a)#4,最大的数值
max(str_a)#'4'返回的是最大的字符
max(tuple_a)#4同样比较的是数值
max(dict_a)#7,比较的是Key
max(array_a)#(5,7)

这里面比较有趣的是,当字符串为字符时,输出情况则对比字符的ascii码,遵循的是从左到右,谁排在前面的字符大,返回谁

list_a=['azbcd','zaaaa','ybaca']
max(list_a)#'zaaaa'

不过这里我们可以对判断的条件进行修改,以达到我们想要的比较效果:

  1. 比较字符串的长度
list_a=['azbasadd','zaaaa','ybaca']
max(list_a,key=len)#'azbasadd'
  1. 利用lambda函数来控制,下面是比较字符串的第三个字符大小
str_a=['azbasadd','zaaaa','ybzca']
max(list_a,key=lambda x:x[3])#'ybzca'
  1. 比较dict的value值
dict_a={1:1,2:57,3:23,5:3,7:1}
max(dict_a.values())#57

不过在比较的时,需要注意的是比较相同类型,不能将字符串和数值类型进行比较

  1. 对字典指定Key进行比较
object_1 = {'name': 'Alex', 'price': 100}
object_2 = {'name': 'Bob', 'price': 60}
object_3 = {'name': 'Tom', 'price': 50}
list_obj = [object_1, object_2, object_3]
#比较各个元素的'name'
max_name = max(list_obj, key=lambda x: x['name'])
print(max_name)#{'name': 'Tom', 'price': 50}
#比较各个元素的'price'
max_price = max(list_obj, key=lambda x: x['price'])
print(max_price)#{'name': 'Alex', 'price': 100}

max函数参考博客

  • memoryview(obj):查看给定对象(bytes或者bytearray)的内存地址
byte_a=b'hello'
print(memoryview(byte_a))#打印byte_a的内存地址

memoryview详解

  • next(iterator[, default]):返回下一个迭代的对象,在没有下一个元素时返回该默认值,否则触发StopIteration 异常
iter_a=iter([1,2,3,4])

while(1):
    try:
        print(next(iter_a))
    except StopIteration:
        print('已到末尾,没有下一个元素')
        break
#当我们设置default时,则不会触发StopIteration
while(1):
    x=next(iter_a,'end')
    print(x)
    if x == 'end':
        print('已到最后一个元素')
        break
  • oct(x):将一个整数转变为一个前缀为“0o”的八进制字符串
oct(87)#'0o127'

当我们不需要Oo前缀可以采用下面的方法,用%o来控制:

print('%#o' % 87, '%o' % 87)#0o127 127
print(format(10, '#o'), format(10, 'o'))#0o127 127
print(f'{87:#o}', f'{87:o}')#0o127 127

你可能感兴趣的:(每天Python学习--max,min,memoryview,next,oct)