python学习6_一些零散概念(三元表达式,列表生成式,字典生成式,递归,匿名函数,模块导入)

以下三元表达式,列表生成式,字典生成式可以让代码显得更加简单,其实不一定使用,有很多替代方法

三元表达式:

语法:res =条件成立时的返回值  if 条件 else 条件不成立时的返回值

示例代码:取出两个值的最大值

# 传统函数写法
def max(x, y):
    if x>y:
        return x
    else:
        return y


res = max(1,2)

# 三元表达式写法
x = 1
y = 2
res = x if x>y else y

列表生成式:

示例代码:取出1到10中大于3的值

示例代码:将列表中以demo结尾的成员取出,并全部大写

# 传统写法
list1 = []
list2 = []
for i in range(10):
    if i>3:
        list1.append(i)
print(list1)

# 列表生成式
list2 = [i for i in range(10) if i > 3]
print(list2)
# 列表生成式例子2
names =['a_demo', 'b', 'c_demo', 'd_demo']
names = [name.upper() for name in names if name.endswith('demo')]
print(names)

字典生成式:

示例代码:把列表转换成字典

# 要求将下列列表转换成字典
info=[
    ['name', 'cooky'],
    ['age', 18],
    ['sex', 'male']
]
d={}

# 传统方法
for item in info:
    d[item[0]] = item[1]
print(d)

# 字典生成式
d = {item[0]: item[1] for item in info}
print(d)

#把d中的key全部变成大写
d = {k.upper():v for k,v in d.items()}
print(d)

 递归:在调用一个函数的过程中又直接或间接的调用自己

示例代码:打印出如下嵌套列表中的值

list1 = [1, [2, [3, [4, [5, [6, [7, [8]]]]]]]]


def tell(l):
    for item in l:
        if type(item) is not list:
            print(item)
        else:
            tell(item)


tell(list1)

示例代码:递归算法的应用----》二分法,找出nums列表中指定的数字

nums = [3, 11, 13, 15, 23, 27, 43, 51, 72, 81, 93, 101]


def binary_search(nums, find_num):
    print(nums)
    if nums.__len__() == 0:
        print('not exist')
        return
    mid_index = len(nums)//2
    if find_num > nums[mid_index]:
        rirht_nums = nums[mid_index+1:]
        binary_search(rirht_nums, find_num)
    elif find_num < nums[mid_index]:
        left_nums = nums[:mid_index]
        binary_search(left_nums, find_num)
    else:
        print('find it')

匿名函数:只用一次以后不会再用的函数

示例代码:实现两个数相加

print((lambda x, y: x + y)(1, 2))

示例代码:字典实现按value值排序

salaries = {
    'name1': 100,
    'name2': 50,
    'name3': 200,
    'name4': 150
}

print(max(salaries, key=lambda x: salaries[x]))

print(min(salaries, key=lambda x: salaries[x]))

print(sorted(salaries, key=lambda x: salaries[x]))

map功能:可以设置map后的值

names = ['name1', 'name2', 'name3']

res = map(lambda x: x+'_map', names)
print(list(res))

# 可以用列表生成式替代
l = [name+'_map' for name in names]
print(l)

filter:删掉不关心的值

names = ['name1_filter', 'name2', 'name3_filter']

res = filter(lambda x: x.endswith('filter'), names)
print(list(res))

l = [name for name in names if name.endswith('filter')]
print(l)

l = (name for name in names if name.endswith('filter'))
print(list(l))

reduce:合并值

# reduce
l = ['a', 'b', 'c', 'd', 'e']

from functools import reduce
res = reduce(lambda x, y: x+y, l, 'AAA')
print(res)

res = reduce(lambda x, y: x+y, range(0, 101))
print(res)

猜你喜欢

转载自www.cnblogs.com/cooky/p/9363428.html