有列表理解的问题

时间:2016-07-14 15:44:32

标签: python

def divisble_numbers(a_list, terms):
    b_list = [x for x in [a_list] if (x % [terms] == 0)]
    c_list = [x for x in b_list if all(x % [terms] == 0)]
    return c_list

divisble_numbers([2,3,5,1,6,7,8,9,10,11,12], [2,3])        

返回此错误:TypeError: unsupported operand type(s) for %: 'int' and 'list'

我正在尝试获取可被两个术语整除的索引列表。我对我得到的错误很困惑,对列表理解很新,会感激任何帮助。

3 个答案:

答案 0 :(得分:2)

你非常接近。这段代码应该有效:

def divisble_numbers(a_list, terms):
    return [x for x in a_list if all(x % term == 0 for term in terms)]

print(divisble_numbers([2,3,5,1,6,7,8,9,10,11,12], [2,3]))

# Output:
# [6, 12]

这里有两个列表理解。一个是x for x in a_list if ...。另一个位于allx % term == 0 for term in terms

答案 1 :(得分:2)

你的列表理解是好的,但你不小心将方括号中的一些东西包裹在方括号中,例如[terms],因为它们已经是列表,所以不需要这样做。 [terms]将生成包含列表的列表。

其次,您获得的错误是因为您正在获取列表的mod(%)。 mod运算符仅适用于数字。

def divisble_numbers(a_list, terms):
   b_list = [x for x in a_list if (x % terms[0] == 0)]
   c_list = [x for x in b_list if (x % terms[1] == 0)]
   return c_list

答案 2 :(得分:0)

b_list = [x for x in a_list if x%(reduce(lambda x,y : x*y, terms))==0]

输入:

a_list, terms = [2,3,5,1,6,7,8,9,10,11,12], [2,3]

输出:

[6, 12]

您的功能将是:

def divisble_numbers(a_list, terms): return [x for x in a_list if x%(reduce(lambda x,y : x*y, terms))==0]