2011-10-13 32 views
0

我需要一點幫助,爲學校使用python的作業問題。提示很簡單,但我似乎無法弄清楚。如何在這個簡單的Python作業中進行調試?

''' 
rem(A,B) returns the list 
       [A[0]%B[0], A[1]%B[1], ...] etc 

>>> rem((10,20,30), (7,8,9)) 
[3, 4, 3] 
>>> X = [ i for i in range(10,18) ] 
>>> Y = [ j+3 for j in range(8) ] 
>>> rem(X,Y)+["?"] 
[1, 3, 2, 1, 0, 7, 7, 7, '?'] 
>>> rem([5,3], [3,2]) 
[2, 1] 
>>> rem([10,9], [5,4]) 
[0, 1] 
''' 

我創建了這個代碼片斷哪種類型的作品,但並不完全:

def rem(A,B): 
    return [A[0] % b for b in B] 

眼下的定義工作,但僅限於每個序列中的第一個值。我認爲這是由於A[0] - 我需要一些方法使它做A[x+1],但我不確定。另外,我非常肯定,我還必須在定義中的某個地方使用range()

回答

5

您需要將A的每個元素與B中的相應元素配對,然後對它們進行修改。

[x % y for (x, y) in zip(A, B)] 
0

Ignacio's answer是正確的和最Python的,這是更基本的方式:

def rem(a,b): 
    l = [] 
    for x in range(len(a)): 
     l.append(a[x]%b[x]) 
    return l 

看評論呢!

+0

提問者已經熟悉LC。我的回答只是說明'zip()'和元組在迭代過程中解包,這是最後兩個缺失的概念。並且請不要編寫遍歷'range(len(...))'的代碼。 –

+0

@ IgnacioVazquez-Abrams你是對的,他很熟悉他們。抱歉。但是爲什麼'range(len())'不能轉發?或者你爲什麼這麼說?正如我所說,我認爲你的答案更好,我只是想增加另一種選擇。 – Trufa

+0

使用'range(len(...))'需要多個索引操作來檢索對象,而不是'zip()'(或'itertools.izip()')直接暴露對象。 –