Python:删除不必要的括号?

Python:删除不必要的括号?,python,syntax,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) 正如您所看到的,括号/

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

它工作得很好,但它给我的结果中有太多的括号/括号。我希望将结果作为一个包含所有数字的列表输出,而不是大量输出,每个输出包含一个数字

代码如下:

def prime_list(X, Y):
    Z = 0
    while X <= Y:
        if is_prime(X):
            Z = Z, X
        X = X + 1
    print (Z)
正如您所看到的,括号/括号太多了


如何重写代码,使其不产生这些问题?

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

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

虽然X不是一个直接的答案,但这里有一个更简洁的方法:

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

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

def prime_列表(X,Y):
Z=()
当X在“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,…),这更接近您认为会得到的结果。

作为旁注,说到不必要的括号:您不需要
打印(z)
。如果这是Python2.x,只需执行
printz
。如果它是3.x,
print
是一个函数调用,就像
is_prime
,那么就执行
print(Z)
。更重要的是,您可能希望
返回Z
,而不是
print Z
。这意味着您可以编写调用
prime\u list
的代码,并对生成的列表执行某些操作,而不仅仅是打印出来并扔掉它。@abarnert谢谢,要点不错。不过我不习惯使用列表,所以我想这就是为什么我使用了
print
而不是
return
的原因,谢谢,这很有效。不过,我对Python还不熟悉,所以我不太了解如何使用list和.appendworks@kongehund当前位置你看过报纸了吗?还是第三方教程?(官方版本对新手不那么友好,尽管如果你是一名C专家,对perl、Self、Haskell和Icon有一定的经验,那就太好了…@abarnert如果你知道任何其他编程语言,那就太好了,为什么你必须精通C并了解perl、Self、Haskell和Icon?我从官方教程中学到了很多,只知道Lua:)@abarnert谢谢你的链接。Python是我编程的第一种语言,因为我最近才开始编程。我正在从一本书中学习Python,所以我没有读过官方教程。@MarkusMeskanen:很多东西被解释为“像C”,还有一些东西被解释为“像”其他语言之一。例如:“字符串可以下标(索引);像在C中一样,字符串的第一个字符下标(索引)为0…像在Icon中一样,子字符串可以用切片表示法指定…”实际上,自90年代的原始版本以来,本教程只进行了适度的更新,当我们有理由假设每个学习Python的人都知道C语言,可能还知道Perl语言时。(我不知道为什么会有对Icon和Self的引用…)添加到列表中会更有效(因为它已经就位,而连接元组每次都会构造新的元组对象),但我遇到的主要问题是该函数被称为
prime_list
;返回一个列表是一种暗示。@Cairnarvon:在适当的位置并不一定能让它更快;有很多例子都不是这样(例如,
过滤器
或listcomp几乎总是比就地删除要好)。如果重要的话,你需要测试。(这可能并不重要)。但100%同意你的主要观点。
def prime_list(X, Y):
    return [ x for x in range(X, Y+1) if is_prime(x) ]
def prime_list(X, Y):
    Z = ()
    while X <= Y:
        if is_prime(X):
            Z += X,
        X = X + 1
    print (Z)