for i in range(len(results_histogram)):
if i!=len(results_histogram)-1:
url+=str(results_histogram[i])+','
我的if语句正在检查我是否在最后一个循环中,但它不起作用。我做错了什么?
答案 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:]