1 寻找平衡点:
假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点
numbers = [1,3,5,7,8,25,4,20,29]; sum = 0;for num in numbers: sum += num;#求出数组的和for index in range(len(numbers)): former = 0; after = 0; i = 0; for i in range(index):#求出当前循环点的前半段数据 former += numbers[i]; after = sum – former – numbers[index];#用和减去当前数和前半部分和 if(former == after): print ("The balance point is:",numbers[index]);
由于是初学,所以第一个程序遇到问题是难免的,谈一下我遇到的问题:
(1)for循环中的递增迭代: for index in range(len(numbers)): 对于数组的索引迭代,,需要用到len()求数组的长度,用range进行索引迭代。
for i in range(index):在这句循环的时候,本来我的意思是i 递增到index 循环,但是非常不幸运,编译不过:
Traceback (most recent call last): File "BalancePoint.py", line 15, in <module> for i in index:TypeError: ‘int’ object is not iterable
查了下,原来不能直接用int进行迭代,而必须加个range.
2 删除list里面的重复元素:
方法一:直接将list 转变为set
a = [1,2,3,3,4,5,1,1]a = list(set(a)) # ? set ?????print (a,"/n");
shit,我居然还没学到set,这是在网上看到的方法。NND,我很郁闷的说!我用的是传统的方法,折腾死我了,不得不说,很久没写代码了,生疏了!
方法二: 就算排序,然后逐个比较,鉴于del会直接把元素删除,设置了个flag数组来标记该删除的元素:
NameList = ["Carol","Andy","Terry","Feng","Carol","Jie","Terry"];NameList.sort();Flag=[];for index in range(len(NameList)): Flag.insert(index,0);# = 0;index =0;secondIndex=0;for index in range(len(NameList)-1): inx = index+1; for secondIndex in NameList[index+1:]: if (NameList[index]== secondIndex): #del NameList[secondIndex]; #Flag.insert(secondIndex,1); Flag[index] = 1; inx = inx +1;print("/n");print (Flag,"/n");index = 0;end = range(len(NameList));for index in end: if (Flag[index] ==1): del NameList[index]; #print (index,"/n"); print (NameList,"/n");
说一下我遇到的问题:
第一个,定义一个和原来list长度相同的全为零的数组。
Flag=[];for index in range(len(NameList)): Flag.insert(index,0);# = 0;
这个写就可以了,比较郁闷的是最开始没定义Flag[].到后面使用的时候一直报错。
第二个: for secondIndex in NameList[index+1:]:
我最开始是这么写的 for secondIndex in NameList:,然后再这句话前头赋值 secondIndex=NameList[index+1];
然后一直就debug不对,seondIndex直接从第一个元素开始,最开始还以为是涉及全局变量和局部变量的问题,还使了global,结果根本就不是,我的理解是 secondIndex在这里直接被赋值了,因为in NameList是从最初开始循环的,my lady gaga!我很郁闷!
第三个: 这个不算问题,主要是还是对语法不是很熟悉,才开始学,最开始饮用list里面的元素我是这么写的NameList(index+1);
区别就在于()
大理的洱海形如人耳,风平浪静时,