迭代器生成器和匿名函数

练习,不断练习

'''
迭代器生成器和匿名函数
截至:05月11日  08:00
'''
'''
1、现在有一个列表   li = [11,21,4,55,6,67,123,54,66,9,90,56,34,22], 

请将 大于5的数据过滤出来,然后除以2取余数,结果放到新的列表中(匿名函数结合filter去做)
'''
print("第一题解答:")
li = [11, 21, 4, 55, 6, 67, 123, 54, 66, 9, 90, 56, 34, 22]
result = [(lambda y, x: y % x)(it, 2) for it in filter(lambda x: x > 5, iter(li))]
print(result)

'''
2、定义一个可以使用send传入域名,自动生成一个在前面加上http://,在后面加上路径/user/login的url地址,

生成器最多可以生成5次数据,生成5条数据之后再去生成,则报错StopIteration

使用案例:
# 例如:
res = g.send('www.baidu.com')
# 生成数据res为:http://www.baidu.com/user/logim'
'''
print("第二题解答:")


def gen():
    for i in range(5):
        s = yield i
        print("http://{0}/user/login".format(s))

g = gen()
g.send(None)
for i in range(5):
    try:
        g.send("www.baidu.com")
    except StopIteration as e:
        print(e.value)


# -------------------------------------------下面两题是扩展练习题,有时间可以去做,不要求提交-----------------------
# 3、算法面试题
# 有一个正整数列表(数据是无序的,并且允许有相等的整数存在),
# 编写能实现下列功能的函数,传入列表和正整数x,返回下面要求的三个数据
# def func(array, x)
# 逻辑代码
#     return count, li1, new_array
# 1、统计并返回在列表中,比正整数x大的数有几个(相同的数只计算一次),并返回-----返回值中的的count
# 2、计算列表中比正整数X小的所有偶数,并返回  -----------返回值中的li
# 3、将列表中比正整数X小的偶数去掉,未去掉的数添加到新列表中,并返回-------返回值中的new_array
print("第三题解答:")
def func(array, x):
    # 去重
    array=set(array)
    array=list(array)
    new_array=array
    # 1、统计并返回在列表中,比正整数x大的数有几个(相同的数只计算一次)
    li = [(lambda y:y)(it) for it in filter(lambda y: y > x, iter(array))]
    count=len(li)
    # 2、计算列表中比正整数X小的所有偶数
    li1 = [(lambda y:y)(it) for it in filter(lambda y: y < x and y%2==0, iter(array))]
    # 3、将列表中比正整数X小的偶数去掉,未去掉的数添加到新列表中
    eles =[(lambda y:y)(it) for it in filter(lambda y: y < x and y%2==0, iter(array))]
    for ele in eles:
        new_array.remove(ele)
    return count, li1, new_array

li = [11, 21, 4, 55, 6, 67, 123, 54, 66, 9, 22, 22, 80, 80]
print(func(li,50))


# 4、定义一个函数实现以下功能,第一个元素是数据标识,第二个元素的数值必须大于等于50才返回,不够50往后累加加到最后如果不够50也直接返回,因为没有可加的数据了
# 例子1 :
#
# a = [[1,3],[2,51],[3,49],[4,42],[5,42]] #入参
#
# a1 = [[2,54],[4,91],[5,42]] #返回
#
#
# 例子2:
#
#  b = [[1,50],[2,5],[3,10],[4,42],[5,42],[6,10]] #入参
#
#  b1 = [[1,50],[4,57],[6,52]] #返回
print("第四题解答:")
def dataAdd(data1):
    list = []
    data2 = iter(data1)
    for i in data2:
       while True:
        if i[1] >= 50:
            list.append(i)
            break
        try:
            gen = next(data2)
            i = [gen[0], gen[1] + i[1]]
        except StopIteration:
            list.append(i)
            break
    return list

a = [[1,3],[2,51],[3,49],[4,42],[5,42]]
b = [[1,50],[2,5],[3,10],[4,42],[5,42],[6,10]]
print("a1:\n{}".format(dataAdd(a)))
print("b1:\n{}".format(dataAdd(b)))



猜你喜欢

转载自blog.csdn.net/weixin_43431593/article/details/106183146