python - 使用 lambda 函数将 double for 循环转换为列表理解

标签 python lambda list-comprehension

我有以下代码,需要将其转换为列表理解(一行)。但是,我无法这样做。 该代码计算 A 输入范围内的质数。

def sieve(A):    
    l = []
    f = lambda x : int(x**0.5)
    for p in range(2,A+1):        
        for i in range(2, f(p) + 1):
            if p % i == 0:
                break
        else:
            l.append(p)
    return l

到目前为止,我遵循的方法不起作用。尤其是 for-loop 中的 break 让我很失望。

list(set([val for sublist in [[p  for i in range(2, f(p) + 1) if p %i != 0 ] for p in range(2,A) ] for val in sublist]))

编辑
为问题添加约束条件。 代码只能是一条语句,不能有evalexec。代码长度不得超过 160 个字符。

最佳答案

[p for p in range(2,A+1) if next((i for i in range(2, int(p**0.5) + 1) if (p % i) == 0),None)==None]

代码长度为 100 个字符。
我们使用next()打破迭代。
说明

def sieve(A):
  [p for p in range(2,A+1) if getFirstDiv(p)==None]

def getFirstDiv(p):
  next(divIter(p),None)

def divIter(p):
  return (i for i in range(2, int(p**0.5) + 1) if (p % i) == 0)
<小时/>

输出

15 --> [2, 3, 5, 7, 11, 13]
10 --> [2, 3, 5, 7]

关于python - 使用 lambda 函数将 double for 循环转换为列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46597939/

相关文章:

python - 截距 scipy.stats.linregress 的标准误差

python - Django:顶级项目文件夹 = root(好听的短名称),非顶级项目文件夹 = ? (需要好听的短名)

javascript - 如何从 lambda 函数返回字符串?

C#/ lambda : object parameter explanation request (noob)

python - 如何将 bool 条件包含到Python的列表理解中?

Python 从列表列表中选择一项

python - 从 "[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]"转换为 unix 时间戳

lambda - 将 maplist 与没有主体的 lambda 一起使用?

python - 这个 for 循环代码(带有 `if not in` 条件)可以转换为列表理解吗?

python - Twisted/tkinter 程序在退出时崩溃