列表,字典,集合推导式

8.1列表推导式

优点:

  • 对于列表解析,编写起来更加精简,可在多种环境中是使用。
  • 列表解析比手动的for循环语句运行更快,因为他们的迭代在解释器内部是以C语言的速度执行的,而不是以python代码执行。

基础语法:

li = [1, 2, 3, 4, 5]
a = [x + 10 for x in li]   
# (x + 10)是循环变量,后面跟着循环变量的头部部分,它声明了循环对象,以及一个可迭代对象(for x in li)
 
例一:30以内所有能被3整除的数
multiples = [i for i in range(30) if i % 3 == 0]
print(multiples)
---[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

 例二:30以内所有能被3整除的数的平方

def squared(x):
    return x*x

multiples = [squared(i) for i in range(30) if i % 3 is 0]      #一个带有返回值的函数
print(multiples)

 例三:找到嵌套列表中名字含有两个‘e’的所有名字

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

print([name for lst in names for name in lst if name.count('e') >= 2])     #仔细观察语句顺序,不难理解
---['Jefferson', 'Wesley', 'Steven', 'Jennifer']

 例四:求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

M = [[1,2,3],[4,5,6],[7,8,9]]
a =[num for lst in M for num in lst if num % 3 == 0]
print(a)
---[3, 6, 9]

 例五:打印从100,99,98到0的值

a = [x for x in reversed(range(101))]
print(a)
---[100, 99, 98, 97, 96---3,2,1,0]

例六:求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

lst =[(x, y) for x in range(5) if x % 2 == 0 for y in range(6) if y % 2 == 1]
print(lst)
---[(0, 1), (0, 3), (0, 5), (2, 1), (2, 3), (2, 5), (4, 1), (4, 3), (4, 5)]

 例七:

y = 10

for i in range(100):
    print(i*y) # 比较两者的差别

l=[i*y for i in range(100)]
print(l)

例八:多层循环

l = []
for i in range(1, 10):
    for j in range(1, 10):
        s = i * j
        l.append(s)
print(l)

l = [i * j for i in range(1, 10) for j in range(1, 10)]  # 比较两者差别
print(l)

例九:文件中的使用

lines = [line.rstrip() for line in
         open('xx.txt') if line[0] == 'p']  # 收集文本中以字母P开头的行
print(lines)

例十:输出[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12]]

ret = [[i*j for j in range(5)] for i in range(4)]
print(ret)

8.2字典推导式

例一:将一个字典的key和value对调
mcase = {'a': 10, 'b': 34}
mcase_frequency = {mcase[k]: k for k in mcase}    # mcase[k],现在代表value值
print(mcase_frequency)

---{10: 'a', 34: 'b'}

 例二:合并大小写对应的value值,将k统一成小写

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) +
                              mcase.get(k.upper(), 0) for k in mcase.keys()}    # 字典中get()函数,用于返回指定键的值,如果值不存在则返回默认值
print(mcase_frequency)

---{'a': 17, 'b': 34, 'z': 3}

8.3集合推导式

  例:计算列表中每个值的平方,自带去重功能    
squared = {x**2 for x in [1, -1, 2]}
print(squared)
---{1, 4}
l=[5,-5,1,2,5]
print({i**2 for i in l})
---{25,1,4}
posted @ 2018-02-24 00:17  -Learning-  阅读(300)  评论(0编辑  收藏  举报