在python中将modulo应用于list的最惯用的方法

时间:2013-08-01 15:09:53

标签: python

目前我有一个包含一些非重复正整数的列表,如a = [1,2,6,15,19]

创建一个返回新列表的函数的最惯用的方法是什么,该列表是%x的每个元素的模a的结果,而输出中没有任何重复的元素?< / p>

具体来说,我希望f(a,x)在没有重复元素的情况下返回[1%x,2%x,6%x,15%x,19%x]

例如f([1,2,6,15,19],4)会返回[1,2,3]

2 个答案:

答案 0 :(得分:6)

使用列表推导和set()过滤掉重复项并保留顺序:

def f(values, x):
    seen = set()
    add = seen.add
    return [res for res in (i % x for i in values) if res not in seen and not add(res)]

演示:

>>> f([1,2,6,15,19], 4)
[1, 2, 3]

如果不需要保留顺序,只需使用set comprehension并返回结果集:

def f(values, x):
    return {i % x for i in values}

答案 1 :(得分:4)

要返回集合列表,您需要一个包含在列表中的集合理解。

def f(l, x):
    return list({i % x for i in l})

根据问题评论,返回该集可能是最佳选择。

def f(l, x):
    return {i % x for in l}