Python:删除不必要的括号?

时间:2013-05-17 21:37:41

标签: python syntax

我在Python中编写了一个非常简单的函数,它打印出特定序列中的所有素数。

它工作正常,但它给我的结果中有太多的括号/括号。我想把结果作为一个输出,只有一个包含所有数字的列表,而不是很多输出,每个包含一个数字。

以下是代码:

def prime_list(X, Y):
    Z = 0
    while X <= Y:
        if is_prime(X):
            Z = Z, X
        X = X + 1
    print (Z)

代码中使用的函数is_prime()只返回True(如果数字是素数)和False(如果不是)。

基本上,对于每个循环,它会检查X是否为素数。如果是,则X将添加到名为Z的列表中。虽然,当它这样做时,它还会在列表中添加不必要的括号/括号。这是结果,使用序列1-100:

>>> prime_list(1,100)
(((((((((((((((((((((((((0, 2), 3), 5), 7), 11), 13), 17), 19), 23), 29), 31), 37), 41), 43), 47), 53), 59), 61), 67), 71), 73), 79), 83), 89), 97)

正如您所看到的,括号/圆括号太多了。

我怎样才能重写代码,所以它不会制作这些代码?

4 个答案:

答案 0 :(得分:5)

只需附加到列表而不是嵌套元组:

def prime_list(X, Y):
    Z = []
    while X <= Y:
        if is_prime(X):
            Z.append(X)
        X = X + 1
    return Z

答案 1 :(得分:3)

不是一个直接的答案,但这是一个更清洁,更短的方式:

def prime_list(X, Y):
    return [ x for x in range(X, Y+1) if is_prime(x) ]

答案 2 :(得分:0)

您还可以连接元组(在附加到Z时注意尾随逗号):

def prime_list(X, Y):
    Z = ()
    while X <= Y:
        if is_prime(X):
            Z += X,
        X = X + 1
    print (Z)

不确定哪个更有效:附加到列表或连接元组......

答案 3 :(得分:0)

在“z = z,x”行中,你所做的是为z分配一个包含z和x的列表。在第一次之后,当您到达此处时,z始终是一个列表,因此您将获得一个包含旧列表和整数的新列表。所以,在开始时z = 0,然后是0,1下一个,然后它变成椭圆形...下一次,它变为(0,1),2;上一个列表(旧z)和新x。下次,你得到((0,1),2),3等等。

如果使用z.append(x),它会在列表中添加一个附加项,而不是每次都创建一个新的2元素列表。使用z.append(x),最后,你会得到(0,1,2,3,...),这更接近你的想象。