for循环
重复执行同一段代码
就是循环
循环列表
-
for val in list_name:
-
list_num = [1,2,3,4,5,6,7,8,9] for i in list_num:print(i)
代码执行顺序
从上往下依次执行
遍历
通过某种顺序把某种集合所有元素都访问一遍
list_food={"火锅","烧烤","张晗","牛魔"}
for food in list_food:print(f"我喜欢吃{food}")
range整数列表
一个参数
-
range(n)
表示[0,n)区间的数字,不包含n -
#------------range()------------------- for i in range(5):print(i)
两个参数
-
range(a,b)
表示[a,b)区间的数字,不包含n -
for i in range(1,5):print(i)
三个参数
-
range(a,b,c)
表示[a,b)区间的数字,且间隔c,不包含n,不大于b -
for i in range(1,10,2): #--->1,3,5,7,9print(i)
while循环
-
while循环是一种
控制流
循环语句,通常用于不知道具体循环次数的情况 -
while [执行条件]:
-
#---------while-------------------- num = 0 while num<10:print(num)num+=1
break与continue
break
跳出或者说是终止当前整个循环,循环终止continue
跳过本次循环,进行下次循环,实际循环并没有被终止
循环与列表的练习
1470. 重新排列数组
给你一个数组 nums
,数组中有 2n
个元素,按 [x1,x2,...,xn,y1,y2,...,yn]
的格式排列。
请你将数组按 [x1,y1,x2,y2,...,xn,yn]
格式重新排列,返回重排后的数组。
示例 1:
输入:nums = [2,5,1,3,4,7], n = 3
输出:[2,3,5,4,1,7]
解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]
示例 2:
输入:nums = [1,2,3,4,4,3,2,1], n = 4
输出:[1,4,2,3,3,2,4,1]
示例 3:
输入:nums = [1,1,2,2], n = 2
输出:[1,2,1,2]
题解
class Solution:def shuffle(self, nums: List[int], n: int) -> List[int]:ret=[]for i in range(n):ret.append(nums[i])# 前nret.append(nums[i+n])# 后nreturn ret
1920. 基于排列构建数组
给你一个 从 0 开始的排列 nums
(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans
,其中,对于每个 i
(0 <= i < nums.length
),都满足 ans[i] = nums[nums[i]]
。返回构建好的数组 ans
。
从 0 开始的排列 nums
是一个由 0
到 nums.length - 1
(0
和 nums.length - 1
也包含在内)的不同整数组成的数组。
示例 1:
输入:nums = [0,2,1,5,3,4]
输出:[0,1,2,4,5,3]
解释:数组 ans 构建如下:
ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]= [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]= [0,1,2,4,5,3]
示例 2:
输入:nums = [5,0,1,2,3,4]
输出:[4,5,0,1,2,3]
解释:数组 ans 构建如下:
ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]= [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]]= [4,5,0,1,2,3]
题解
class Solution:def buildArray(self, nums: List[int]) -> List[int]:ret = []n = len(nums)for i in range(n):ret.append(nums[nums[i]])return ret
2824. 统计和小于目标的下标对数目
给你一个下标从 0 开始长度为 n
的整数数组 nums
和一个整数 target
,请你返回满足 0 <= i < j < n
且 nums[i] + nums[j] < target
的下标对 (i, j)
的数目。
示例 1:
输入:nums = [-1,1,2,3,1], target = 2
输出:3
解释:总共有 3 个下标对满足题目描述:
- (0, 1) ,0 < 1 且 nums[0] + nums[1] = 0 < target
- (0, 2) ,0 < 2 且 nums[0] + nums[2] = 1 < target
- (0, 4) ,0 < 4 且 nums[0] + nums[4] = 0 < target
注意 (0, 3) 不计入答案因为 nums[0] + nums[3] 不是严格小于 target 。
示例 2:
输入:nums = [-6,2,5,-2,-7,-1,3], target = -2
输出:10
解释:总共有 10 个下标对满足题目描述:
- (0, 1) ,0 < 1 且 nums[0] + nums[1] = -4 < target
- (0, 3) ,0 < 3 且 nums[0] + nums[3] = -8 < target
- (0, 4) ,0 < 4 且 nums[0] + nums[4] = -13 < target
- (0, 5) ,0 < 5 且 nums[0] + nums[5] = -7 < target
- (0, 6) ,0 < 6 且 nums[0] + nums[6] = -3 < target
- (1, 4) ,1 < 4 且 nums[1] + nums[4] = -5 < target
- (3, 4) ,3 < 4 且 nums[3] + nums[4] = -9 < target
- (3, 5) ,3 < 5 且 nums[3] + nums[5] = -3 < target
- (4, 5) ,4 < 5 且 nums[4] + nums[5] = -8 < target
- (4, 6) ,4 < 6 且 nums[4] + nums[6] = -4 < target
题解
class Solution:def countPairs(self, nums: List[int], target: int) -> int:sum = 0n = len(nums)for i in range(n):for x in range(i+1,n):if(nums[i]+nums[x]<target):sum+=1return sum