驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
python 中 for 的基本用法和 表达式
/  

python 中 for 的基本用法和 表达式

基本的 for循环

先看这个例子:

    # 遍历 list
    # 1-1、直接遍历到对应的元素,不依赖索引
    list_x = [1, 2, 3, 5]
    for item in list_x:
        print(item)

    # 1-2、好处是可以获取到索引,需要的时候需要用到
    for index in range(len(list_x)):
        print(f"{index} value is {list_x[index]}")
       
    # 1-3、二者都遍历
    for (index, item) in enumerate(list_x, start=0):
        print(f"{index} value is {item}")
  • 同 Java等其他语言差不多,for要遍历的容器需要是可以迭代

  • Python 中的 for 不同于Javafor而是更类似于foreach,直接遍历的是其中的元素。

  • 上面的1-2就是利用了range() 将获取的集合长度转换为可遍历的容器,其内容是从 0-len

  • 最后的1-3 利用了enumerate() 将单纯的元素集合转为了元组容器,此时可以索引均访问。

基本的for表达式

语法:[表达式 for 迭代元素 in 迭代容器]

作用:通过表达式继续处理迭代的元素

先来2 个简单的

  # [0, 1, 4]  
  result = [x ** 2 for x in range(3)]
  # [3, 4, 5]
  result = [x + 2 for x in [1, 2, 3]]
  # 遍历的元组,元组也可以被遍历
  result = [x - 1 for x in (1, 3, 4)]

二层循环的 for表示

  # 结果是:[0, 1, 2, 1, 2, 3]  
  result = [x + y for x in range(2) for y in range(3)]
  # 类似如下代码
   list_result = []
   for x in range(2):
       for y in range(3):
           list_result.append(x + y)
   print(list_result)
  • 个人觉得这个表达式很python,比C#Java这些来的更简洁

带过滤的 for表达式

再来一个类似 Javafilter的操作。

    result = [x for x in range(10) if x % 2 == 0]
    result = [x for x in range(10) if x % 2 == 0 and x % 3 == 0]
    result = [x for x in range(10) if x % 2 == 0 if x % 3 == 0]

一个很奇葩的 for表达式

再来一个我最后才看懂的

		result = [x ** 2 if x % 2 == 0 else x + 2 for x in range(10)]
		# 类似如下代码
    list_result = []
    for x in range(10):
        if x % 2 == 0:
            list_result.append(x ** 2)
        else:
            list_result.append(x + 2)
    print(list_result)
   	# 结果是:[0, 3, 4, 5, 16, 7, 36, 9, 64, 11]
不积跬步,无以至千里。不积小流,无以成江海。