目前我有一个包含一些非重复正整数的列表,如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]
答案 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}