【问题标题】:How to remove the trailing comma from a loop in Python?如何从 Python 中的循环中删除尾随逗号?
【发布时间】:2015-07-19 20:09:03
【问题描述】:

到目前为止,这是我的代码:

def main():
    for var in range (1, 101):
        num= IsPrime(var)
        if num == 'true':
             print(var, end=', ') 

IsPrime 函数计算函数是否为素数。

我需要打印出从 1 到 100 的素数,格式为一行,中间有逗号和空格。例如,输出应如下所示:

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 

我试图运行我的程序,但我总是在 97 末尾得到一个尾随逗号。我不知道如何删除逗号,因为它是一个循环,str.rstrip 和 [:-1]不工作。

我需要使用循环,我不能使用

print('2') 
print(', ', var, end='') 

对于其他素数。

我不知道是否有更简单的方法来编写此代码,或者我不知道可以正确执行此操作的函数。

【问题讨论】:

  • IsPrime(var) 应该返回一个布尔值而不是字符串,那么如果IsPrime(var) 足以检查

标签: python python-3.x


【解决方案1】:

在我看来,惯用的 Python 代码如下所示:

print(', '.join([str(x) for x in xrange(1, 101) if IsPrime(x) == 'true']))

(如果IsPrime 实际返回TrueFalse 而不是字符串,情况会更好)

这是函数式代码而不是命令式代码。

如果你想要命令式代码,你应该在除了循环的第一项之外的每个元素之前打印', '。您可以使用一个布尔变量来执行此操作,在您看到一个项目后将其设置为 true。

【讨论】:

  • 如果你删除了表达式周围的[ ... ],那会更加pythonic。那么它只是一个轻量级的生成器,传递给join-method...
  • @koffein 一点也不差!我自己喜欢filter,因为它几乎适用于任何函数式编程语言。
  • 好吧,在这种情况下,ifilter from itertools 将是一个需要考虑的函数,因为据我所知filter 返回一个列表,就像[ ... ] up 的列表理解一样那里。我个人不喜欢过滤器,如果我必须创建一个lambda 内联。我有一个函数已经存在,它很好,但在我看来,它看起来比列表理解/生成器更拥挤......
  • @koffein,这实际上会更糟,因为 python 仍然必须建立一个加入列表。
  • 当我说 print(', '.join([x for x in xrange(1, 101) if IsPrime(x) == 'true'])) 完全失败时,我错了吗,因为 join() 需要一个字符串但得到一个 int?所以它错过了str(x),不是吗?
【解决方案2】:

您可以将所有数字放入一个列表中,然后将所有值连接起来:

def main():
    primes = []
    for var in range (1, 101):
        if IsPrime(var) == 'true':
            primes.append(var)
        num = IsPrime(var)
    print(', '.join(primes))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2014-03-31
    • 2021-01-25
    • 2019-01-10
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多