列表字典推导式、生成式

本文详细介绍了Python中列表字典推导式、for循环、元素运算的应用,包括列表、元组、集合推导,以及如何结合if条件语句、素数判断和内嵌函数如filter。
摘要由CSDN通过智能技术生成

列表字典推导式

  • 意思

    • 在列表里直接进行运算,结合for语句,将需要改变的元素 一个个遍历出来
    • 可以快速存放新的结果数据,并且操作简单
  • 语法

    [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
    运算程序+for i(需要进行运算的对象) in (一堆嗷嗷待哺的数据)list
    
  • 应用

    • 对列表的元素进行运算

      test = [1, 2, 3]
      print([i * i for i in test])   # [1,4,9]
      print([[i, i + 2] for i in test])  # [[1,3],[2,4],[3,5]]
      
    • 遍历每个元素–进行一样的操作

      list=[' dog','cat ',' sleep ']
      list_new=[i.strip() for i in list]
      print(list_new)   #['dog', 'cat', 'sleep']
      
    • 里面不止一个遍历

      list1=[1,2,3]
      list2=[4,5,5]
      list3=[x*y for x in list1 for y in list2]
      print(list3)   #[4, 5, 5, 8, 10, 10, 12, 15, 15]
      list4=[[x*y,x+y] for x in list1 for y in list2]
      print(list4)  #[[4, 5], [5, 6], [5, 6], [8, 6], [10, 7], [10, 7], [12, 7], [15, 8], [15, 8]]
      
    • 实行行列转换

      list1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
      list2=[[row[i] for row in list1] for i in range(len(tset[0]))
      print(list2)
      #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
      #后面的for是说明i一共有四个数字,前面的for说明row遍历三次得到三个列表
      
    • 加入判断语句–可以过滤数据

      test = [1, 2, 3, 4, 5, 6]
      list_one = [x for x in test if x % 2 == 0]
      print(list_one)
      # [2, 4, 6]
      
      list_two = list(filter(lambda x: x % 2 == 0, test))
      print(list_two)
      # [2, 4, 6]
      #filter是Python中的一个内嵌函数,它有两个参数,
        其中第一个参数是一个函数
         第二个参数是一个迭代器
         返回值是布尔类型
      #为真则保留 反之则去除--可以用于过滤数据
      
    • 判断列表里有几个对称数

      test = [1221, 1234, 12321, 14441, 15672]
      
      list_one = sum([num == num[::-1] for num in map(str, test)])
      print(list_one)
      # 3
      
      list_two = len([num for num in map(str, test) if num == num[::-1]])
      print(list_two)
      # 3
      

列表生成式

  • def::将推导式里的中括号变成了小括号

    • 推导式是一次性生成所有数据,列表式是一个个数据生成(空间小,效率低一点)
  • 示例

    • test = [1, 2, 3]
      list_one = (i * i for i in test)
      print(list_one)
      #<generator object <genexpr> at 0x0000018A23DDA650>
      #生成式的直接返回结果时一个生成器
      
    • 素数判断

      import math
      
      def is_prime(n):
          if n == 2: return True
          if n < 2 or n % 2 == 0: return False
          return all(n % i for i in range(3, int(math.sqrt(n) + 1), 2))
      
      print(is_prime(23))
      # True
      
  • 字典推导式

    {:for 迭代变量 in 可迭代对象 [if 条件表达式]}
    
    • 示例

      my_dict = {key: value for key in range(3) for value in range(2)}
      print(my_dict)
      # {0: 1, 1: 1, 2: 1}
      #my_dict = {[key: value] [for key in range(3)]  [for value in range(2)]}
      
  • 元祖推导式和集合推导式

    • my_tuple = (i for i in range(10))
      print(my_tuple)
      # <generator object <genexpr> at 0x000001D17C9B7DD0>
      # 组推导式生成的结果并不是一个元组,而是一个生成器对象
      
    • my_set = {value for value in 'HelloWorld'}
      print(my_set)
      # {'r', 'o', 'W', 'H', 'l', 'd', 'e'}
      # 因为集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样,使用的时候很容易晕掉
      
  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值