python 列表生成

列表生成式

  • 生成 11 22 …10*10

    • for循环(麻烦)
    • 列表生成式

      list = [x*x x in range(1:10)]
  • for与if同时使用

    • 列表生成(判断偶数乘法)
      list = [x*x for x in range(1,10) if x%2==0]1
  • 多重for循环

    • 列表生成,全排列
      list = [x+y for x in "xc" for y in "abc"]
      ['xa', 'xb', 'xc', 'ca', 'cb', 'cc']
      
  • 列出系统文件夹

    ```
    import os
    [d for d in os.listdir(".")]
    ```
    
  • for多变量循环:

    • 单变量循环

      dict = {"a":1,"b":2,"c":3}
      In [23]: for key in dict.values():
      …:    print (key)
      …:
      1
      2
      3
      dict = {"a":1,"b":2,"c":3}
      In [24]: for key in dict.keys():
      …:    print(key)
      …:
      a
      b
      c
    • 多变量循环

      In [28]: for key,value in dict.items():
      …:    print(key+"="+str(value))
      …:
      a=1
      b=2
      c=3
      In [30]: [k+'='+str(v) for k,v in dict.items()]
      Out[30]: ['a=1', 'b=2', 'c=3']
  • 利用列表循环将 L = ['Hello', 'World', 18, 'Apple', None]转换成['hello', 'world', 'apple']

    • 如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:
    • 使用内建的isinstance函数可以判断一个变量是不是字符串:isinstance('x', str) True

      In [42]: [s.lower() for s in L1 if isinstance(s,str)]
      Out[42]: ['hello', 'world', 'apple']
    • 进阶 将list中的转为小写,其他不变

    In [45]: def change_list(list):
    …:    list1=[]
    …:    for s in list :
    …:        if (isinstance(s,str)):
    …:            list1.append(s.lower())
    …:        else :
    …:            list1.append(s)
    …:    return list1
    …:
    In [46]: change_list(L1)
    Out[46]: ['hello', 'world', 18, 'apple', None]

发表评论