Python入门第18课——推导式(只读课堂)

    科技2022-07-16  134

    In [1]: #欢迎来到“只读课堂”!

     

    In [2]: #这节课给大家讲的是“推导式”。

     

    In [3]: #列表推导式

     

    In [4]: # for value in 序列

     

    In [5]: #例如:

     

    In [6]: mylist = [1,2,3,4,5]

     

    In [7]: new_list = [var*var for var in mylist]

     

    In [8]: new_list

    Out[8]: [1, 4, 9, 16, 25]

     

    In [9]: #它就完成了一项工作。

     

    In [10]: #如果不要3这个数字。

     

    In [11]: new_list = [var*var for var in mylist if var != 3]

     

    In [12]: new_list

    Out[12]: [1, 4, 16, 25]

     

    In [13]: #3的倍数就不见了。

     

    In [14]: #——————————————————————————————————————————————————————————————————————

     

    In [15]: #如果用了括号:

     

    In [16]: new_list = (var*var for var in mylist if var != 3)

     

    In [17]: new_list

    Out[17]: <generator object <genexpr> at 0x0457F240>

     

    In [18]: #这样,它就成了一个“生成器”,这个我们在前面讲过了,但是这里再深入一些。

     

    In [19]: #我们来看一下这个生成器给我们多少种代码使用呢

     

    In [20]: dir(new_list)

    Out[20]:

    ['__class__',

    '__del__',

    '__delattr__',

    '__dir__',

    '__doc__',

    '__eq__',

    '__format__',

    '__ge__',

    '__getattribute__',

    '__gt__',

    '__hash__',

    '__init__',

    '__init_subclass__',

    '__iter__',

    '__le__',

    '__lt__',

    '__name__',

    '__ne__',

    '__new__',

    '__next__',

    '__qualname__',

    '__reduce__',

    '__reduce_ex__',

    '__repr__',

    '__setattr__',

    '__sizeof__',

    '__str__',

    '__subclasshook__',

    'close',

    'gi_code',

    'gi_frame',

    'gi_running',

    'gi_yieldfrom',

    'send',

    'throw']

     

    In [21]: #它给了很多,我们挑一些讲。

     

    In [22]: new_list.__next__()

    Out[22]: 1

     

    In [23]: new_list.__next__()

    Out[23]: 4

     

    In [24]: new_list.__next__()

    Out[24]: 16

    In [25]: new_list.__next__()

    Out[25]: 25

     

    In [26]: new_list.__next__()

    ---------------------------------------------------------------------------

    StopIteration Traceback (most recent call last)

    <ipython-input-26-b6fdeffd6037> in <module>()

    ----> 1 new_list.__next__()

     

    StopIteration:

     

    In [27]: #在这之后,它就把所有值取出来了,没有任何值之后,它就说不要再取了。也不算报错。

     

    In [28]: #——————————————————————————————————————————————————————————————————————

     

    In [29]: #字典推导式

     

    In [30]: #它和我们的列表类似,只不过需要两个值存在来维护字典的键值对形式。

     

    In [31]: #例如:

     

    In [32]: mylist = [1,2,3,4,5]

     

    In [33]: mydict = {var:'a' for var in my list}

    File "<ipython-input-33-5500e0ed1b81>", line 1

    mydict = {var:'a' for var in my list}

    ^

    SyntaxError: invalid syntax

     

     

    In [34]: mydict = {var:'a' for var in mylist}

     

    In [35]: mydict

    Out[35]: {1: 'a', 2: 'a', 3: 'a', 4: 'a', 5: 'a'}

     

    In [36]: #这样就生成了一行以a为值的列表。

     

    In [37]: #——————————————————————————————————————————————————————————————————————

     

    In [38]: #集合推导式

     

    In [39]: #集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]

     

    In [40]: #;例如:

     

    In [41]: mylist = [1,2,3,4,5]

     

    In [42]: myset = { var + 1 for var in mylist}

     

    In [43]: myset

    Out[43]: {2, 3, 4, 5, 6}

     

    In [44]: type(myset)

    Out[44]: set

     

    In [45]: #它就成了一个推导式

     

    In [46]: #就是一个集合了。

     

    In [47]: print("\n本次“只读课堂”的python教程就到这了,欢迎继续收看!\n")

     

    本次“只读课堂”的python教程就到这了,欢迎继续收看!

    Processed: 0.009, SQL: 8