如何在这个简单的Python作业中进行调试?

如何在这个简单的Python作业中进行调试?,python,list-comprehension,Python,List Comprehension,我需要一点帮助来解决学校使用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

我需要一点帮助来解决学校使用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()

您需要将
A
的每个元素与其
B
中对应的元素配对,然后对它们进行修改

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

您需要将
A
的每个元素与其
B
中对应的元素配对,然后对它们进行修改

[x % y for (x, y) in zip(A, B)]
是正确的,也是最具Python风格的,这是更基本的方式:

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

是正确的,也是最具python风格的,这是更基本的方式:

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

看到评论了

询问者已经熟悉LCs。我的回答简单地说明了迭代过程中的
zip()
和元组解包,这是最后两个缺少的概念。请不要编写迭代范围(len(…)@IgnacioVazquez Abrams)的代码你说得对,他对这些代码很熟悉。很抱歉但是为什么不
range(len())
它不是向前兼容的呢?或者你为什么这么说?正如我所说的,我认为你的答案更好,我只是想添加另一个选项。使用
range(len(…)
需要多个索引操作来检索对象,而不是
zip()
(或
itertools.izip()
)直接公开对象。@IgnacioVazquez Abrams谢谢你的建议,我会仔细阅读。我多次看到这种迭代方式,我认为它是“正确的”或有效的。再次感谢你的建议!询问者已经熟悉LCs。我的回答简单地说明了迭代过程中的
zip()
和元组解包,这是最后两个缺少的概念。请不要编写迭代范围(len(…)@IgnacioVazquez Abrams)的代码你说得对,他对这些代码很熟悉。很抱歉但是为什么不
range(len())
它不是向前兼容的呢?或者你为什么这么说?正如我所说的,我认为你的答案更好,我只是想添加另一个选项。使用
range(len(…)
需要多个索引操作来检索对象,而不是
zip()
(或
itertools.izip()
)直接公开对象。@IgnacioVazquez Abrams谢谢你的建议,我会仔细阅读。我多次看到这种迭代方式,我认为它是“正确的”或有效的。再次感谢你的建议!