python_列表推导式

列表推导

生蛋的玩法,这个是一次性生完。

res = {'egg %s'%i for i in range(100) if i > 50}
print(res)

改进版,将列表生成式转换成生成器   元祖()  

#将列表生成式转换成生成器
g = ('egg %s'%i for i in range(100))
print(g)
print(next(g))

  

  省内存,一次只产生一个值,


 

使用列表生成式过滤文件

  

####普通写法
g = os.walk('c:/yang')   #迭代器只能使用一次
for i in g:
    for k in i[-1]:
        print('%s//%s'%(i[0],k))

#列表生成式写法
res = ['%s//%s'%(i[0],k) for i in g for k in i[-1]]
print(res)

  

####转换成生成器,如果文件量很大的话,我可以一个一个的去输出,
g = os.walk('c:/yang')
res = ('%s//%s'%(i[0],k) for i in g for k in i[-1])
print(res)
print(next(res))

  

  

文件处理

 

#######文件处理,空格
g = open('a.txt')
res = (i.strip() for i in g)
# print(res)
print(list(res))  #将生成器打印出来的结果转换成list
# for i in res:
#     print(i)

  


 

列表和字符串进行穿插

 

s = 'hello'
n = [1,2,3,4,5]
for i in n:
    for k in s:
        print((i,k))

res =[(i,k) for i in n for k in s]
print(res)

  


 

 

将b.txt文件的商品、价格、数量,转换成字典,然后取出每个商品的总价格,再进行所有商品总价的和
b.txt的内容

##############
apple 10 3
tesla 100000 2
mac 3000 2
lenovo 30000 3
chicken 10 3

  

with open('b.txt') as f:
    # dic_list = {'name':None,'price':None,'num':None}
    li = []
    for line in f:
        line = line.split()
        # print(line)
        total = float(line[-2]) *float(line[-1])
        li.append(total)
    print(sum(li))
    #     dic_list['name'] = line[0]
    #     dic_list['price'] = line[1]
    #     dic_list['num'] = line[2]
    #     total = float(dic_list['price']) * float(dic_list['num'])
    #     li.append(total)
    # print(li)
    # total_price = sum(li)
    # print(total_price)
#这是使用列表生成式写的........还可以将它转换成生成器()
g = open('b.txt')
res =[ float(line.split()[-2])*float(line.split()[-1]) for line in g ]
res1 = sum(res)  #计算所有的商品总和
# print(res)    #单个商品的总价
print(res1)

# for i in res:
#     print(i)

  

使用列表生成式将文件内容写成字典格式,写成生成器格式,如果文件内容很大,一次性打印出来会出大事,做人需谨慎!!!

 

with open('b.txt') as f:
    res = [ i.split()  for i in f]
    res1 = ( {'name':i[0],'price':i[1],'total':i[2]} for i in res if float(i[1]) > 10000)
    # print(res1)
    # print(next(res1))
    # print(next(res1))
    for i in res1:
        print(i)

  

 

 
 

 

posted @ 2017-04-12 14:49  beiguuu  阅读(126)  评论(0)    收藏  举报