怎么让for循环走完_再走下面的方法如何让for循环一直进行


Time:2023-05-16 15:06:29

关于怎么让for循环走完的问题,我们总结了以下几点,给你解答:

怎么让for循环走完



继续通过练习题熟悉python编程, 看到题目请先自行想办法解决。

编程就是要把某些方法用代码实现出来,光有想法却做不出来是没有用的。通过对python语法的熟悉,把解决问题的思路用python语法实现。

判断是否存在重复元素

给定一组数组,判断一下内部是否有相同的元素,如果有就返回true,如果没有就返回false,此题目请使用函数方式进行解析。

比如:

数组1:[1, 2, 3, 3, 4, 5]

结果: true

数组2:[1, 2, 3, 4]

结果:false

数组3:[1, 2, 3, 4, 5, 6, 1]

结果: true

该如何做?

# 暴力法:所有元素一一比较nums1 = [1, 2, 3, 4, 5]nums2 = [4, 1, 2, 3, 4, 5]def duplicate(list): nums_count = len(list) # 获取列表的长度,然后以此作为索引进行比较 for i in range(nums_count): # 双循环实现某个元素和其它元素的比较 for j in range(nums_count): if i == j: # 如果索引一致,就是同一位元素,无需要比较 continue elif list[i] == list[j]: return True else: # 好多新手甚至是有编程经验的人会在这里产生疑惑,else在这里属于for的范围而非if的范围 return False print(duplicate(list=nums1))print(duplicate(list=nums2))# 所有元素一一比较太简单粗暴了,而且效率低下,那可不可以先排个序再进行比较,这样好快一点呢?nums1 = [1, 2, 3, 4, 5]nums2 = [4, 1, 2, 3, 4, 5]def duplicate(nums): nums.sort() # 使用list的sort方法将列表排序 for i in range(len(nums)): if nums[i] == nums[i-1]: # 使用索引依次比较,发现重复值后返回True return True else: # 没有找到重复值,返回False return Falseprint(duplicate(nums=nums1))print(duplicate(nums=nums2))# 该题还有其它解法吗?思考一下然后写出其算法。else的进一步理解

我初学Python时,else的作用范围也产生过相当长一段时间的疑惑,所以这里可以用两段代码向大家展示一下else的作用范围差异,好去理解这个特别的语法

# 在0到8之时找到3并输入for i in range(9): if i == 3: print(i) else: # 注意此处的else位置,它是属于if的 print('fail')# 运行完以上代码,你发现了什么?# 运行同样的代码,只是调整了esle的位置for i in range(9): if i == 3: print(i)else: # 注意此处的else位置,它是属于for的,如果有其它编程语言经验的人看到这段代码都要直呼是错误语法了 print('fail')# 运行完以上代码,你发现了什么?

else属于if时,它是属于if条件中的“其它”分支,当if或elif中的条件都没有触发时,else就会触发执行,所以你在第一段代码中发现else运行了很多次。

而else属于for时,它是在for循环中所有循环都走完才执行,也就是range(9)中9次循环都执行完了,else才会执行,所以第二段代码只运行了一次。

判断只出现过一次的元素

第一题我们是从数组中找到重复的元素,那要是反过来,我想在数组中找到只出现过一次的元素呢?同样请使用函数解决。

比如:

数组1:[1, 1, 2, 2, 3, 4, 4, 5, 5, 5]

结果:返回 3

数组2: [ 1, 1, 1, 2, 2, 2, 3, 3, 4]

结果: 返回 4

# list中有一个count方法,我们找到count只有1的元素即可,set有去重功能,可以减少循环次数nums1 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 5]nums2 = [1, 1, 2, 2, 3, 3, 4, 4, 5]def find(nums): for i in {x for x in nums}: if nums.count(i) == 1: return iprint(find(nums=nums1))print(find(nums=nums2))# 搜索引擎搜索了解位运算# 异或运算在python中使用^来实现# 1 ^ 1 ==> 0# 0 ^ 1 ==> 1# 所以此题使用异或计算会不会更简单快捷?nums1 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 5]nums2 = [1, 1, 2, 2, 3, 3, 4, 4, 5]def find(nums): n = 0 for i in nums: n = n ^ i return nprint(find(nums=nums1))print(find(nums=nums2))两个数组的交集

有两个数组,其中部分元素是相同的,通过计算找出这两个数组的相同部分。

如:

num1 = [2, 3, 5, 6, 1]

num2 = [9, 2, 3, 7, 4, 9]

结果: [2, 3]

num1 = [1, 4, 4, 8]

num2 = [2, 5, 3, 4, 8, 9]

结果: [4, 8]

num1 = [1, 4, 4, 8]num2 = [2, 5, 3, 4, 8, 9]def intersect(num1, num2): num1.sort() # 将数组排序后再进行比较 num2.sort() s1index = 0 # 设定两个数组各自的指针 s2index = 0 output = [] # 结果保存在一个列表中 # 两个指针起点相同,也就是说两个数组的比较就是从索引0处开始的,如num1[0]与num2[0] while s1index < len(num1) and s2index < len(num2): # 指定边界,指针不能大于数组内各自的元素个数 if num1[s1index] == num2[s2index]: # 如果指针处的数值相等就是交集,记录结果并给两个指针加1 output.append(num1[s1index]) s1index += 1 s2index += 1 elif num1[s1index] > num2[s2index]: # 如果指针处的数值不相等,数值较小的数组指针加1 s2index += 1 elif num1[s1index] < num2[s2index]: s1index += 1 return outputprint(intersect(num1=num1, num2=num2))数字加一计算

数字149,每一位都分割开,放入列表中为[1, 4, 9]。149加1等于150,而列表形式结果就应该是[1, 5, 0]。在只对列表操作的情况下,请写出函数代码计算列表形式的数字加一的结果。

如:

[1, 2, 3] ==> [1, 2, 4]

[8, 9, 9] == > [9, 0, 0]

[9, 9] ==> [1, 0, 0]

注:列表中的每一个元素只允许是个位数,超过9需要向前一位加“1”。

# 不同的测试样例digits1 = [1, 2, 3]digits2 = [3, 2, 9]digits3 = [9, 8, 9]digits4 = [9, 9, 9]def plus(num): for i in range(len(num)-1, -1, -1): # 计算出数字的长度,这个就是循环的次数,但要从个位向前循环,所以是使用“-1”倒着循环的 if num[i] != 9: # 不等于9的情况下直接在这里加1返回 num[i] += 1 return num # return会直接中断函数的执行,return以下的代码不会执行且直接结果函数的运行 else: num[i] = 0 # 在某一位是9的情况下,把这个位置变成0,因上是倒着从个位往前循环,因此下次循环会在前一位加1 num.insert(0, 1) # 极端情况下所有位都是9,在列表第一位插入1,即可。 return numprint(plus(num=digits1))print(plus(num=digits2))print(plus(num=digits3))print(plus(num=digits4))移动数组中的0

一组数组中有0和非0的数字,不复制列表,只在原表修改的情况下将0移动到末尾,且不改变非0的数字顺序。

如:

nums1 = [0, 3, 5, 0, 7, 9]

结果:[3, 5, 7, 9, 0, 0]

nums2 = [3, 0, 5, 9, 0, 0, 1]

结果:[3, 5, 9, 1, 0, 0, 0]

该如何做?

# 使用双“索引”来改变列表中的数字位置nums1 = [0, 3, 5, 0, 7, 9]def move(nums): index = 0 # 设定一个索引 for i in range(len(nums)): # for循环产生一个原表的默认索引 if nums[i] != 0: nums[index] = nums[i] # 原索引位置数值不等于0的情况下,将原索引位置的数值赋值给index的索引上 index += 1 # index索引计数加1 while index < len(nums): # index索引值与列表的len(nums)不相等,所以index还要继续增长,边界是小于len(nums) nums[index] = 0 # 非0的数都引用完了,index继续增长的情况下,对应位置的数值都为0 index += 1 # index继续加1 return numsprint(move(nums=nums1))# 换个方法# index换作统计0的数量,遇到0就加1。nums2 = [3, 0, 5, 9, 0, 0, 1]def move(nums): index = 0 for i in range(len(nums)): if nums[i] == 0: index += 1 # 遇到0就加1 else: # 非0的情况下 nums[i-index], nums[i] = nums[i], nums[i-index] # 当前索引减去index计数得到一个新的位置,这个位置与索引处的值作交换 return numsprint(move(nums=nums2))

目前为止,我们已经练习了8个脚本,如果大部分都掌握且充分理解了,那你的python编程已经有了很大的提升,可以做许多事情了。

怎么让for循环走完再走下面的方法

如何让for循环一直进行



怎么让for循环走完再走下面的方法



本文拓展问题:

for循环怎么结束循环怎么让for循环走完