列表生成式和生成器表达式

#列表生成式
x = [i for i in range(10)]
print(x)  #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print([i*i for i in range(10)])  #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

#例一:30以内所有能被3整除的数
num = [x for x in range(30) if x % 3 is 0]
print(num)   #[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

#例二:30以内所有能被3整除的数的平方
num = [x*x for x in range(30) if x % 3 == 0]
print(num)  #[0, 9, 36, 81, 144, 225, 324, 441, 576, 729]

# 例三:找到嵌套列表中名字含有两个‘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']

#字典的key和value对调
dict1={"aa":11,"bb":22}

print({dict1[k]: k for k in dict1})   #{11: 'aa', 22: 'bb'}

#列表去重
list1 = [11,22,33,44,33,55,22,00]
list2= []

for i in list1:
    if i not in list2:
        list2.append(i)
print(list2)
print("****************")

print(list(set(list1)))  #[0, 33, 11, 44, 22, 55]

a = [list2.append(x) for x in list1 if x not in list2]
print(a)  #[None, None, None, None, None, None]
print(list2)  #[11, 22, 33, 44, 55, 0]
print("=======")

# 集合推导式,自带去重功能
# 例:计算列表中每个值的平方,自带去重功能

squared = {x**2 for x in [1, -1, 2]}
print(squared)  #{1, 4}


# *******生成器表达式

num = ("==%s"%x for x in range(10))
print(num)  #<generator object <genexpr> at 0x002FF090>

for i in num:
    print(i)



g = (i*i for i in range(10))
print(g.__next__())

 

posted @ 2018-02-02 22:06  CHVV  阅读(168)  评论(0编辑  收藏  举报