列表解析与生成器表达式

列表解析与生成器表达式

  列表推导式:  

egg_list=[]

for i in range(100):
    egg_list.append('egg%s' %i)
print(egg_list)


l=['egg%s' %i for i in range(100) if i > 50]
print(l)

 

  在一个列表中 [ ] ,将for的循环写在列表的右侧。[ for i in rang(100) ] ,将for循环的子代码写在左边, [ 'num%s' %i for i in rang(100) ]。就是列表推导式的写法。

  在列表里也是可以加 if 判断的。

  列表推导式的语法:

  [ expression for item1 in iterable1 if condition1

                for item2 in iterable2 if condition2

        ...

        for itemN in iterableN if conditionN

     ]

  

  类似于:

  res =  [ ] 

  for item1 in iterable1:

    if condition1:

      for item2 in iterable2:

        if condition2:

          ...

          for itemN in iterableN:

            if conditionN:

              res.append(expression)

 

优点:方便,改变了编程习惯。是声明式编程。

 

用处:

l=[1,2,3,4]
s='hello'
#
# l1=[(num,s1) for num in l if num > 2 for s1 in s]
# print(l1)

# l1=[]
# for num in l:
#     for s1 in s:
#         t=(num,s1)
#         l1.append(t)
# print(l1)

 

 

# import os
# g=os.walk('C:\\George')
# file_path_list=[]
# for i in g:
#     # print(i)
#     for j in i[-1]:
#         file_path_list.append('%s\\%s' %(i[0],j))
#
# print(file_path_list)
#
# g=os.walk('C:\\George')
# l1=['%s\\%s' %(i[0],j) for i in g for j in i[-1]]
# print(l1)

 

 

生成器表达式:

  将列表的 [ ] 换为( )。即可用next,一次一个的取出下一个值。

#
# l=['egg%s' %i for i in range(100)]
# print(l)

# g=l=('egg%s' %i for i in range(1000000000000000000000000000000000000))
# print(g)
# print(next(g))
# print(next(g))
# for i in g:
#     print(i)

  生成器表达式的语法:

  与列表推导式的区别在于一个是 [ ] ,一个是( )。

( expression for item1 in iterable1 if condition1

                for item2 in iterable2 if condition2

        ...

        for itemN in iterableN if conditionN

     )

  生成器表达式的优点: 省内存,一个只生产一个值在内存中。

  生成器表达式的应用:读取一个大文件的所有内容。并且处理行。   

f = open('a.txt')
g = (line.strip() for line in f) #去除文件中的每一行的空格。
list(g)    #因为g可以迭代。所以可以转成列表。
# f=open('a.txt')
# l=[]
# for line in f:
#     line=line.strip()     #弊端,在用大量内存空间。
#     l.append(line)

 

列表表达式和生成器表达式的作用:

  用来进行声明是编程。

 b.txt 文件   

apple 10 3
tesla 1000000 1
mac 3000 2
lenovo 30000 3
chicken 10 3

计算b.txt 文件里的每一类的商品的总价钱。

# money_l=[]
# with open('b.txt') as f:
#     for line in f:
#         goods=line.split()
#         res=float(goods[-1])*float(goods[-2])
#         money_l.append(res)
# print(money_l)

#
# f=open('b.txt')
# g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)
#
# print(sum(g))

# with open('b.txt') as f:
#     print(sum((float(line.split()[-1])*float(line.split()[-2]) for line in f)))

 

# with open('b.txt') as f:
#     res=(line.split() for line in f)
#     print(res)
#     dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res)
#     print(dic_g)
#     apple_dic=next(dic_g)
#     print(apple_dic['count'])


# apple_dict=next(dic_g)
# print(apple_dict)

 

#取出单价>10000
with open('b.txt') as f:
    res=(line.split() for line in f)
    # print(res)
    dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res if float(i[1]) > 10000)
    print(dic_g)
    print(list(dic_g))
    # for  i in dic_g:
    #     print(i)

 

posted @ 2018-06-04 09:49  王先生是胖子  阅读(198)  评论(0编辑  收藏  举报