我的任务是:
编写一个函数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
我该如何解决这个问题?
答案 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)]