portfolio = [{'name':'IBM','shares':100,'price':91.1},{'name':'MSFT','shares':50,'price':45.67},{'name':'HPE','shares':75,'price':34.51},{'name':'CAT','shares':60,'price':67.89},{'name':'IBM','shares':200,'price':95.25},]names = [s['name']for s in portfolio] # ['IBM', 'MSFT', 'HPE', 'CAT', 'IBM']more100 = [s['name']for s in portfolio if s['share']>100] # ['IBM']cost =sum(s['shares'] * s['price'] for s in portfolio])name_shares = [(s['name'], s['shares']) for s in portfolio]
Set Comprehension
names ={s['name']for s in portfolio}
Dictionary Comprehension
prices ={s['name']: s['price']for s in portfolio}
Generator Expression
nums = [1,2,3,4]squares = (x * x for x in nums)print(sum(squares))# 30squares = (x * x for x in nums)print(next(squares))# 1print(next(squares))# 4print(next(squares))# 9print(next(squares))# 16print(next(squares))# "StopIteration" Error
List Comprehension vs. Generator Expression
Wiith a list comprehension, Python actually creates a list that contains the resulting data. With a generator expression, Python creates a generator that merely knows how to produce data on demand. In certain application, this can greately improve performance and memroy use. Here is an example:
withopen('data.txt')as f: lines = (t.strip()for t in f) comments = (t for t in lines if t[0]=='#')for comment in comments:print(comment)