一、使用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
浙公网安备 33010602011771号