• 列表生成器


    • xxx
      • 三元表达式
      • name="alex"
      • res="SB" if name == "alex" else "shuai"
      • print(res)
      • -------------
      • SB
      • 列表生成式
        • 语法
        • [expression for item1 in iterable1 if condition1
        •             for item2 in iterable1 if condition2
        •             for item3 in iterable1 if condition3
        •             ...
        •             for item1 in iterable1 if conditionN
        •             ]
        • 事例一
        • egg_list=[]
        • for i in range(100):
        •     egg_list.append("egg%s"%(i))
        • print(egg_list)
        •  
        • #上面简写
        • li = ["egg%s" %(i) for i in range(100)]
        • print(li)
        •  
        • #加条件
        • li = ["egg%s" %(i) for i in range(100) if i>50]
        • print(li)
        • 事例二
        • li = [1,2,3,4]
        • s = "hello"
        •  
        • obj = []
        • for num in li:
        •     for str in s:
        •         xx = (num,str)
        •         obj.append(xx)
        • print(obj)
        •  
        • #上面简写
        • obj = [(num,str) for num in li for str in s]
        • print(obj)
        •  
        •  
        • #只把大于2的和底下拼接
        • obj = [(num,str) for num in li if num > 2 for str in s]
        • print(obj)
      • 列表生成器
        • 优点
          • 省内存  一次只产生一个值在内存里
        • 应用
          • 读取一个大文件的所有内容,并且处理行
          • f = open("a.txt")
          •  
          • #方式一:
          • li = []
          • for line in f:
          •     line=line.strip()
          •     li.append(line)
          • print(li)
          •  
          • #方式二: 列表生成式,还占内存
          • li=[line.strip() for line in f]
          • print(li)
          •  
          • #方式三: 转化为列表生成器
          • li=(line.strip() for line in f)
          • print(li)
          •     #<generator object <genexpr> at 0x10217aa98>
          • print(list(li))
          •     #['123', '123', '567', 'fgg', 'fghhhhh', 'gdgdagfd', 'dggdcbbb']
      • sum/for/list
        • sum/for/list 都是把可迭代对象变成迭代器,然后next取值,并且捕捉异常
        • 事例一
        • #列表是可迭代的, sum和 for/list 相同,把里面的参数变成一个迭代器,然后next取值
        •  
        • print(sum([1,2,3,4]))
        •  
        • num=(i for i in range(3))
        • print(sum(num))
        • 事例二
        • #事例 计算商品的价格,后两列相乘
        •  
        • #---- 文件a.txt
        •  
        • apple   10    3
        • tesla   1000  1
        • mac     3000  2
        • lenovo  200   3
        • chicken 10    3
        •  
        •  
        •  
        • money_l=[]
        • with open("a.txt") as f:
        •     for line in f:
        •         goods=line.split() #每一行变成列表,按空格分开
        •         res=float(goods[-1])*float(goods[-2])
        •         money_l.append(res)
        • print(money_l)
        •     # [30.0, 1000.0, 6000.0, 600.0, 30.0]
        • print(sum(money_l))
        •     # 7660.0
        •  
        •  
        • #简写
        •  
        • with open("a.txt") as f:
        •     g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)
        •     print(sum(g))
  • 相关阅读:
    bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
    bzoj1016: [JSOI2008]最小生成树计数
    bzoj1051: [HAOI2006]受欢迎的牛
    bzoj1003: [ZJOI2006]物流运输
    bzoj1079: [SCOI2008]着色方案
    bzoj1179: [Apio2009]Atm
    bzoj1877: [SDOI2009]晨跑
    bzoj1821: [JSOI2010]Group 部落划分 Group
    bzoj1305: [CQOI2009]dance跳舞
    bzoj1858: [Scoi2010]序列操作
  • 原文地址:https://www.cnblogs.com/golangav/p/7295220.html
Copyright © 2020-2023  润新知