这样写不知道你能不能理解? 这是等效代码: L1 = [] for x in range(1, 100): list = [] for y in range(2, x/2 + 1): if x % y == 0: list.append(y) if not list: L1.append(x) print L1 对于空列表,not [] 返回True 原来的代码中, if not后面是一个临时生成的列表, 如果这个列表为空则表明x没有任何>=2的因子,x必是素数,于是添加x 到主列表. [x for x in range(1, 100) if express ] 这样的语句仅仅在express是True才会添加x