python笔记:一些牛逼的方法

# _*_ coding: utf-8 _*_
from fn import _
from operator import add
from functools import partial, reduce

# 各种生成式

# 列表生成式
a_list = [item**2 for item in range(5)]
print(a_list)


# 字典生成式
a_dict = {
     "%d_key" % item: item**2 for item in range(5)}
print(a_dict)


# 生成器生成式,也可以叫迭代器生成式
a_generator = (item**2 for item in range(5))
print(a_generator)
print(next(a_generator))
print(next(a_generator))


# iter函数和next函数,iter函数生成迭代器
a_list_generator = iter(a_list)
print(next(a_list_generator))
print(next(a_list_generator))
print(type(a_list), type(a_list_generator))


# lambda表达式
a_func = lambda x, y: x**y
print(a_func(2, 3))


# map函数
print(map(abs, range(-4, 5)))
print(list(map(abs, range(-4, 5))))
print(list(map(lambda x: x**2, range(5))))
# 相同位置的一个是x一个是y,而且以短的为准;map() 会根据提供的函数对指定序列做映射。
# 第一个参数 function 以参数序列中的每一个元素调用 function 函数,python2返回包含每次 function 函数返回值的新列表,
# python3返回的是一个迭代器,需要用list()转换成列表。
print(list(map(lambda x, y: x**y, range(1, 5), range(1, 5))))


# reduce函数
# 在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,
# 如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:
# reduce() 函数会对参数序列中元素进行累积。
# 函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(必须有两个参数)
# 先对集合中的第 1、2 个元素进行操作,得到的结果再与第3个数据用 function 函数运算,最后得到一个结果,
# 第3个参数要注意,这是初始值,累加的和的初始值。
print(reduce(lambda x, y: x+y, range(10)))
print(reduce(lambda x, y: x+y, range(10), 100))
# 列表相加,最后会成为一个大列表
print(reduce(lambda x, y: x+y, [[1, 2], [3, 4]], [0]))
# operator.add函数与reduce方法类似
print(reduce(lambda x, y: x+y, range(10)))
print(reduce(add, range(10)))


# filter函数,filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
# 该接收两个参数,第一个为函数,作用是判断真假的,专门为了过滤,
# 第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,
# 最后将返回 True 的元素放到新列表中。python3会返回迭代器,需要用list()方法转换成列表。
print(filter(None, range(-4, 5)))
print(list(filter(None, range(-4, 5))))
print(list(filter(lambda x: x > 0, range(-4, 5))))


# all、any函数
# all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
# 元素除了是 0、空、None、False 外都算 True。
print(all([0, 1, 2]))

# any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。
# 元素除了是 0、空、FALSE 外都算 TRUE。
print(any([0, 1, 2]))


# enumerate函数,index的值是赠送的
for index, item in enumerate(range(6,11)):
    print("%d: %d" % (index, item))


# zip函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
# 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表,
# zip在python3中返回是一个对象。
for a, b in zip([1, 2, 3], ["a", "b", "c"]):
    print(a, b)

# zip返回的对象直接用dict()加持,能直接生成字典,前面介绍字典的生成方式的时候也有讲解
a_dict = dict(zip([1, 2, 3], ["a", "b", "c"]))
print(a_dict)


# partial函数
# 这种写法和下面的partial写法会得到同样的结果
print(int("10010", base=2))
# 第一个参数是int等类型,第二个参数是base
int_base_2 = partial(int, base=2)
print(int_base_2("10010"))


# fn的使用
from fn import _
add_func_1 = (_ + 2)
print(add_func_1(1))
add_func_2 = (_ + _ * _)
print(add_func_2(1, 2, 3))

你可能感兴趣的:(列表,python)