python:我怎么知道我什么时候在最后一个周期

时间:2010-08-03 22:55:41

标签: python syntax

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

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

5 个答案:

答案 0 :(得分:7)

为了避免这个问题,您似乎重写了str.join

','.join(results_histogram)

如果收到TypeError: sequence item 0: expected string, int found之类的错误,那么您可以将中间结果转换为包含

的字符串
','.join(map(str, results_histogram))

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


特别是,你的例子是“不工作”,因为当你只想跳过添加逗号时,你完全跳过了最后一个元素。这一点很明显,只有一个小例子:

>>> 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

答案 1 :(得分:2)

我同意@Mark Rushakoff认为使用join会是最好的。我想对此进行评论,但我没有足够的代表这样做=(

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

您可以使用枚举编写解决方案的方法是:

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

假设url先前已在某处声明。再次,使用join为您的情况会更好。这只是为了显示您可能想要除字符串连接之外的其他情况的枚举。

答案 2 :(得分:1)

Mark肯定适合你的榜样,但有时像这样的情况会发生在没有这种优雅替代品的地方。然后你可以做类似的事情:

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

答案 3 :(得分:1)

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

此示例遵循您的语法:

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

或者您可以使用生成器表达式完成整个事情:

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

答案 4 :(得分:0)

ouput = "("
for telem in text[:-1]:
    output += "%s, " % telem 
output += "%s)\n" % text[-1:]