在Python中为-loop比较列表中的元素

时间:2009-11-04 18:52:42

标签: python list

代码中的方法end有什么问题?

方法end总是返回 1 ,尽管它应该使用当前数据返回 0

# return 1 if the sum of four consecutive elements equal the sum over other sum of the other three sums
# else return 0
# Eg the current sums "35 34 34 34" should return 0    

data = "2|15|14|4|12|6|7|9|8|10|11|5|13|3|2|16"
arra = data.split("|");

def do_row ( arra, n ):
        return arra[4*n:4 + 4*n]

def row_summa (row):
        return sum(map(int,row))

def end ( summat ):                                     # problem here!
        equality = 1 
        for i in summat[2:5]:
                print "Comparing: ", summat[1], " and ", i, ".\n"
                if summat[1] != i:
                        equality = 0 
        print equality

for i in range(0,4):
        summat = []
        summat.append( row_summa( do_row(arra,i) ) ) 
        print row_summa ( do_row(arra,i) )
        summa = 0 

end(summat)

5 个答案:

答案 0 :(得分:2)

我无法确切地告诉你这里要做什么,但我当然可以说为什么end()返回1而不是0.在你的上一个for循环中,你重置{{1在循环开始时到summat,所以在结束时,summat只包含一个值(最近附加的值)。因此,当您在单个项目列表中请求[]时,Python会返回一个空列表(因为该范围内没有值) - 在这种情况下,summat[2:5]没有机会被设置为零,因为equality中的循环永远不会运行。

答案 1 :(得分:2)

我认为你可能有一个错误的错误。请记住,Python中的数组索引从0开始,而不是1.所以你要这样做:

   for i in summat[2:5]:
            print "Comparing: ", summat[1], " and ", i, ".\n"
            if summat[1] != i:
                    equality = 0 

你根本不看summat[0]。或许尝试:

   for i in summat[1:4]:
            print "Comparing: ", summat[0], " and ", i, ".\n"
            if summat[0] != i:
                    equality = 0 

答案 2 :(得分:1)

首先,end不返回1.它返回None。它打印 1.如果你从命令行运行它,那就是一种欺骗性的。

其次,当您致电end时,summat等于[34]。所以这个:

for i in summat[2:5]:

永远不会执行。除非summat包含至少3个元素,否则它不会执行任何操作。

答案 3 :(得分:1)

你有两个问题。将循环中的summat初始化为[],也是Greg提到的一个错误

data = "2|15|14|4|12|6|7|9|8|10|11|5|13|3|2|16"
arra = data.split("|");

def do_row ( arra, n ):
        return arra[4*n:4 + 4*n]

def row_summa (row):
        return sum(map(int,row))

def end ( summat ):                                     # problem here!
        equality = 1 
        for i in summat[1:]:  # 1 <=== IS THE SECOND ELEMENT
                print "Comparing: ", summat[0], " and ", i, ".\n"
                if summat[0] != i:
                        equality = 0 
        print equality

summat = []        # <=== DO THIS BEFORE THE LOOP
for i in range(0,4):
        summat.append( row_summa( do_row(arra,i) ) ) 
        print row_summa ( do_row(arra,i) )
        summa = 0 

end(summat)

答案 4 :(得分:1)

您还应该研究这段代码

data = "2|15|14|4|12|6|7|9|8|10|11|5|13|3|2|16"
arra = map(int,data.split("|"))
summat = [sum(arra[i:i+4]) for i in range(0,len(arra),4)]
print summat
print len(set(summat))==1