您的位置:首页 > 移动开发 > Objective-C

python TypeError: 'int' object is not iterable

2016-11-07 19:59 876 查看
转自:http://blog.csdn.net/carolzhang8406/article/details/6100196

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);

区别就在于()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐