【问题标题】:python: how do i know when i am on the last for cyclepython:我怎么知道我什么时候在最后一个循环
【发布时间】:2010-08-03 22:55:40
【问题描述】:
for i in range(len(results_histogram)):
    if i!=len(results_histogram)-1:
      url+=str(results_histogram[i])+','

我的 if 语句正在检查我是否在最后一个循环中,但它不起作用。我做错了什么?

【问题讨论】:

  • 这是完整的陈述吗?不要生气,但您实际上也在阅读文档吗?学会自己寻找答案很重要。也许你应该阅读文档before你使用Python...
  • @Felix,这太荒谬了。除了人们以不同的方式学习之外,实验通常是一种很好的学习方式,NOBODY 在使用 Python 之前会阅读所有文档到 Python 或其他任何东西。不要自大。
  • 感谢 kenan,我真的从提问中学到了很多东西,我非常感谢大家的意见
  • @Triptych:我的措辞很糟糕。当然,不必阅读所有文档。但是根据OP之前的问题,他似乎甚至没有阅读一些解释例如的基本教程。列表。大多数问题可以通过查看文档来回答。当然,这些问题在这里仍然是有效的问题,但是 OP 提出新问题的速度让我思考。

标签: python syntax


【解决方案1】:

为了稍微回避这个问题,你似乎重写了str.join

','.join(results_histogram)

如果遇到TypeError: sequence item 0: expected string, int found 之类的错误,则可以将中间结果转换为字符串

','.join(map(str, results_histogram))

str.join 无疑比在一个循环中连接多个字符串更有效,因为在 Python 中,字符串是不可变的,所以每次连接都会创建一个新字符串,然后必须在以后进行垃圾回收。


具体来说,您的示例“不起作用”,因为您完全跳过了最后一个元素,而您只想跳过添加逗号。举个小例子就很清楚了:

>>> x = [1,2,3]
>>> for i in range(len(x)):
...   if i != len(x) - 1:
...     print str(x[i]) + ',',
... 
1, 2,

所以你可以将你的例子重写为

for i in range(len(results_histogram)):
    url += str(results_histogram[i])
    if i!=len(results_histogram)-1:
      url += ','

但你还是应该坚持使用str.join

【讨论】:

  • 为什么我不能按照我现在的方式去做>??
  • @I__:因为它不必要地复杂。
  • @I__:您可以按照现在的方式进行操作,但您不应该这样做。当有更多可立即阅读和调试的代码已经解决了您的问题时,不要重新实现代码。
  • 问题:为什么必须包含MAP,为什么不能这样做; ','.join(str(results_histogram))
  • 回答:因为 results_hisogram 是一个列表。 map 对该列表的元素执行一个函数。
【解决方案2】:

我同意@Mark Rushakoff 的观点,即使用 join 是最好的。我只想对此发表评论,但我没有足够的代表这样做=(

无论如何,还要查看内置的 enumerate() 函数。可以在here找到文档。

您可以使用 enumerate 编写解决方案的一种方法是:

for i, res in enumerate(results_histogram):
    url+=res
    if i != len(results_histogram)-1:
       url+=','

假设 url 之前在某处声明过。同样,根据您的情况使用 join 会更好。这只是向您展示了您在未来可能想要执行字符串连接之外的操作的情况。

【讨论】:

  • 那不是if i != len(results_histogram) - 1:吗?
  • +1 用于使用enumerate。 Python 标准库中最被低估的函数之一,恕我直言。最重要的是,即使 len() 不可用,它也能工作(例如,如果您正在处理一个懒惰地计算序列的生成器函数)。
【解决方案3】:

Mark 确实适合您的示例,但有时会在不存在如此优雅的替代方案的情况下发生这种情况。然后你可以这样做:

if len(results_histogram):
    url += str(results_histogram[0])
    for i in range(len(results_histogram))[1:]:
        url += ',' + str(results_histogram[i])

【讨论】:

    【解决方案4】:

    通常不需要使用变量在列表中递增。切片将返回除最后一个元素之外的所有内容。

    此示例遵循您的语法:

    for el in results_histogram[:-1]:
        url += str(el) + ','
    

    或者你可以用一个生成器表达式来完成整个事情:

    ','.join(str(el) for el in results_histogram[:-1])
    

    【讨论】:

      【解决方案5】:
      ouput = "("
      for telem in text[:-1]:
          output += "%s, " % telem 
      output += "%s)\n" % text[-1:]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-14
        • 2010-09-08
        • 2018-08-24
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        相关资源
        最近更新 更多