如何在Python 3.5.5中添加列表元素?

时间:2014-10-11 22:22:49

标签: python list

我的任务是:

  

编写一个函数sumOfPairs,它有一个list类型的参数。该   list可以为空或包含整数。列表的长度必须是   0或偶数。如果列表的长度不是0而不是   甚至,该函数应该打印一条错误消息并返回None。您   可以假设列表只包含整数。该函数返回   列表中每个连续数字对的总和。   示例:如果列表为[1,5,2,10,15,2,9,3],则函数返回   [6,12,17,12]。

到目前为止,我的尝试是:

def sumOfPairs (list1: list):
    if len(list1) != 0 and len(list1)%2 != 0:
        print ("Error")
        return (None)
    else:
        x = list1.index(int)
        answer = []
        while x<=len(list1):
            newListValue=list1(x)+list1(x+1)
            answer.insert(x,newListValue)
            x=x+2

    return (answer)

print (sumOfPairs ([1,5,2,10,15,2,9,3]))

但执行时会产生以下错误:

Traceback (most recent call last):
  File "C:\Users\Andrew\Desktop\lab3.py", line 79, in <module>
    print (sumOfPairs ([1,5,2,10,15,2,9,3]))
  File "C:\Users\Andrew\Desktop\lab3.py", line 71, in sumOfPairs
    x = list1.index(int)
ValueError: <class 'int'> is not in list

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

def sum_of_pairs(l): 
    if len(l) % 2: # if the length of the list mod 2 has a remainder, the list length is uneven
        print("Error, uneven length list")
    else: # else, step through the list in pairs and add each pairing
        return [l[i]+ l[i+1] for i in range(0,len(l),2)] 

In [3]: (sum_of_pairs([1,5,2,10,15,2,9,3]))
Out[3]: [6, 12, 17, 12]

if len(l) % 2:中未指定返回值的python函数默认返回None,因此我们不需要显式返回None。

答案 1 :(得分:2)

In [11]: l = [1,5,2,10,15,2,9,3]

In [12]: [sum(pair) for pair in zip(l[0::2],l[1::2])]
Out[12]: [6, 12, 17, 12]

答案 2 :(得分:1)

我并不特别喜欢你的方法,但请特别注意这个错误。

Traceback (most recent call last):
  File "C:\Users\Andrew\Desktop\lab3.py", line 79, in <module>
    print (sumOfPairs ([1,5,2,10,15,2,9,3]))
  File "C:\Users\Andrew\Desktop\lab3.py", line 71, in sumOfPairs
    x = list1.index(int)
ValueError: <class 'int'> is not in list

现在看一下它出现的那一行,并尝试用英语说出来

x equals the first index in list1 where the value is 'int'

请注意,它不是the value is AN int!这是至关重要的,也是错误的原因。您的列表不包括课程int。那将是这样的:

[1,2,3,int,5,6,7,8] # not your list

更容易测试所有索引包含整数,然后只是遍历列表。让我们尝试一下(即使你的练习另有说法,部分是为了让你不要复制/粘贴这个!!:D)

def sum_of_pairs(lst: list):
    if len(lst) == 0 or len(lst) % 2 != 0:
        raise ValueError("Invalid list length")
        # makes more sense to raise an exception here than print an error
    if any(not isinstance(int, el) for el in lst):
        # if any element is not an int:
        raise ValueError("Invalid list contents")
    result_list = []
    for element in lst:
        first_el = element
        second_el = next(lst)
        # advance the iterator once to grab the next element
        result_list.append(first_el + second_el) # add them and append
    return result_list

如果你知道如何使用石斑鱼配方,那就更容易了,这个配方位于itertools模块here的pydocs中:

def grouper(iterable, n):
    return zip(*iter([iterable])*n)

def sum_of_pairs(lst: list):
    # validate here, I'm not going to re-write it
    return [sum(pair) for pair in grouper(lst, 2)]