【发布时间】:2021-07-20 20:54:20
【问题描述】:
我正在编写一段代码,该代码应输出以逗号分隔的项目列表。该列表是使用 for 循环生成的。我用
for x in range(5):
print(x, end=",")
问题是我不知道如何去掉与列表中最后一个条目一起添加的最后一个逗号。它输出这个:
0,1,2,3,4,
如何删除结尾的 ' , ' ?
【问题讨论】:
我正在编写一段代码,该代码应输出以逗号分隔的项目列表。该列表是使用 for 循环生成的。我用
for x in range(5):
print(x, end=",")
问题是我不知道如何去掉与列表中最后一个条目一起添加的最后一个逗号。它输出这个:
0,1,2,3,4,
如何删除结尾的 ' , ' ?
【问题讨论】:
sep="," 作为参数传递给print()
print 语句就快到了。
不需要循环,print 有一个sep 参数以及end。
>>> print(*range(5), sep=", ")
0, 1, 2, 3, 4
print 内置函数将任意数量的项目作为要打印的参数。将打印任何非关键字参数,并以sep 分隔。 sep 的默认值是一个空格。
>>> print("hello", "world")
hello world
更改sep 具有预期结果。
>>> print("hello", "world", sep=" cruel ")
hello cruel world
每个参数都被字符串化为str()。将可迭代对象传递给打印语句会将可迭代对象字符串化为一个参数。
>>> print(["hello", "world"], sep=" cruel ")
['hello', 'world']
但是,如果您将星号放在可迭代的前面,这会将其分解为单独的参数,并允许 sep 的预期用途。
>>> print(*["hello", "world"], sep=" cruel ")
hello cruel world
>>> print(*range(5), sep="---")
0---1---2---3---4
join 作为替代使用给定分隔符将可迭代连接到字符串中的另一种方法是使用分隔符字符串的join 方法。
>>>print(" cruel ".join(["hello", "world"]))
hello cruel world
这有点笨拙,因为它需要将非字符串元素显式转换为字符串。
>>>print(",".join([str(i) for i in range(5)]))
0,1,2,3,4
您建议的方法是使用循环连接字符串并在此过程中添加逗号。当然,这会产生正确的结果,但工作量要大得多。
>>>iterable = range(5)
>>>result = ""
>>>for item, i in enumerate(iterable):
>>> result = result + str(item)
>>> if i > len(iterable) - 1:
>>> result = result + ","
>>>print(result)
0,1,2,3,4
【讨论】:
*range(5)?
print(*iterable, sep=",") 或print(",".join([str(i) for i in iterable]))。
您可以使用str.join() 并创建要打印的字符串,然后将其打印。示例 -
print(','.join([str(x) for x in range(5)]))
演示 -
>>> print(','.join([str(x) for x in range(5)]))
0,1,2,3,4
我正在使用上面的列表推导,因为它比生成器表达式更快,当与 str.join 一起使用时。
【讨论】:
str.join() 是从数据生成自定义字符串的好选择。但是,如果我们只是将字符串传递给print(),那么就没有必要了。只需使用print(*iterable, sep=", ")。
为此,您可以使用str.join()。
In [1]: print ','.join(map(str,range(5)))
0,1,2,3,4
我们需要先将range(5) 中的数字转换为字符串才能调用str.join()。我们使用map() 操作来做到这一点。然后我们用逗号, 加入从map() 获得的字符串列表。
【讨论】:
您可以使用的另一种形式,更接近您的原始代码:
opt_comma="" # no comma on first print
for x in range(5):
print (opt_comma,x,sep="",end="") # we are manually handling sep and end
opt_comma="," # use comma for prints after the first one
print() # force new line
当然,您的程序的意图可能会更好地服务于该线程中的其他更pythonic 的答案。不过,在某些情况下,这可能是一种有用的方法。
【讨论】:
for n in range(5):
if n == (5-1):
print(n, end='')
else:
print(n, end=',')
【讨论】:
5-1 的要求,但它仍然是一个常数。最好将列表大小保存为变量然后重复使用。
示例代码:
for i in range(10):
if i != 9:
print(i, end=", ")
else:
print(i)
结果:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
【讨论】:
for x in range(5):
print(x, end=",")
print("\b");
【讨论】:
\b 覆盖输出是特定于终端的。如果将输出重定向到文件,它也不会覆盖。