博客园 首页 联系 订阅 管理

一、使用list()和range()函数来生成一个含有数字元素的列表

list1 = list(range(10))
# 等价于
# list1 = list(range(0, 10))  # range()函数带头不带尾,即包括0不包括10
# 等价于
# list1 = list(range(0, 10, 1))  # range()函数第三个参数表示步长,即相邻两个元素的差值
print(list1)
# 以上三者都返回 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

二、如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环;方法二可以使用列表生成式

# 使用列表生成式
list2 = [x * x for x in range(1, 11)]
print(list2)
# 返回 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 解释:把要生成的元素x * x放到前面,后面跟for循环,for循环中的参数和前边的参数要统一,并且是对应的

 

三、使用列表生成式,for循环后面还可以加上if判断,这样我们就可以筛选出想要的结果(例:仅偶数的平方):

# for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
list3 = [x * x for x in range(1, 11) if x % 2 == 0]
print(list3)
# 返回 [4, 16, 36, 64, 100]
# 解释:后边的if条件就是想奇数过滤掉

 

四、使用两层循环,实现全排列,就是循环里面套循环

# 可以使用两层循环
list4 = [m + n for m in 'ABC' for n in 'XYZ']
print(list4)
# 返回:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
# 解释:相当于循环套循环

 

五、for循环其实可以同时使用两个甚至多个变量,在列表生成器中也可以使用到

# for循环其实可以同时使用两个甚至多个变量
d = {'A': 'X', 'B': 'Y', 'C': 'Z'}
list5 = [m + '=>' + n for m, n in d.items()]
print(list5)
# 返回 ['A=>X', 'B=>Y', 'C=>Z']

 

六、使用

  1、获取指定目录下的所有文件、目录

import os
list6 = [d for d in os.listdir('.')]  # 获取当前文件夹下的所有目录文件
print(list6)
# 返回['.idea', 'if-else.py', '列表生成式.py', '自定义去除首尾空白函数.py', '迭代.py', '递归.py']

  2、把一个list中所有的字符串变成小写

# 把一个list中所有的字符串变成小写
L = ['Hello', 'World', 'IBM', 'Apple']
list7 = [s.lower() for s in L]
print(list7)
# 返回 ['hello', 'world', 'ibm', 'apple']

# 如果元素中含有数字,会报错
LL = ['Hello', 999, 'World', 'IBM', 'Apple']
list8 = [s.lower() for s in LL if isinstance(s, str)]
print(list8)
# 返回 ['hello', 'world', 'ibm', 'apple']

 七、生成器

  a、将列表生成式的[]换为(),即变成了生成器(generator)

li = (i * 2 for i in range(10))
print(li)
# <generator object <genexpr> at 0x000001A42DEBB1A8>
for i in li:
    print(i)  # 可取出生成器中每一个元素

  b、使用next()【2.7版本】;__next__()【3系列,2系列】可以每次调出生成器中的元素

    generator保存的是算法,每次调用next(li),就计算出li的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

  c、将一个函数变成一个生成器的方法

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1


fib(10)
函数
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1


res = fib(10)
print(res)
# <generator object fib at 0x0000017573383CA8>
print(next(res))  # 1
print(res.__next__())  # 1
print('=====')  # =====
print(next(res))  # 2
将以上函数编程生成器