第一题,将一个列表中0移到列表的最后。两种方法实现
方法一:
思路:
1 声明两个空列表,循环列表arr判断是否为0,然后分别放0和非0的列表
2 然后两个列表相加
arr = [0,1,-1,0,2,3,0]
zero_list = []
non_zero_list = []
for i in arr:
if i==0:
zero_list.append(0)
else:
non_zero_list.append(i)
print(non_zero_list + zero_list)
方法二:
需要2次遍历:
第一次遍历,如果是0,则进行第二次遍历
第二次遍历逻辑,就是从当前位置和后面所有的元素交换一次位置
第一次遍历,如果是0,则进行第二次遍历
第二次遍历逻辑,就是从当前位置和后面所有的元素交换一次位置
[1,0,-1,0,2,3,0]
[1,-1,0,0,2,3,0]
[1,-1,0,0,2,3,0]
[1,-1,0,2,0,3,0]
[1,-1,0,2,3,0,0]
[1,-1,0,2,3,0,0]
[1,-1,0,0,2,3,0]
[1,-1,0,0,2,3,0]
[1,-1,0,2,0,3,0]
[1,-1,0,2,3,0,0]
[1,-1,0,2,3,0,0]
arr = [1,0,2,0,2,0,0]
for i in range(len(arr)):
if arr[i]== 0:
for j in range(i,len(arr)-1):
if arr[j+1]!=0:
arr[i],arr[j+1]=arr[j+1],arr[i]
break
print(arr)
当第一层循环遇到0的时候
执行第二层循环:
当前位置的元素和后面所有元素中的第一个非0元素进行值的交换
然后退出第二层循环
[1,0,2,0,2,0,1]
[1,2,0,0,2,0,1]
[1,2,2,0,0,0,1]
[1,2,2,1,0,0,0]
[1,2,2,1,0,0,0]
第二题,写一个int函数,可以将整数的字符串转化为数字
def int(s):
num_map = {str(i):i for i in range(10)}
if not isinstance(s,str):
raise TypeError
for i in s:
if i not in "0123456789":
raise ValueError
result = 0
x=len(s)-1
for i in range(len(s)):
result +=num_map[s[i]]*10**x
x-=1
return result
print(int("123")