如何从 print(string, end=", ") 中删除最后一个逗号

8

我的for循环输出是:

string = ""
for x in something:
   #some operation
   string =  x += string 

print(string)

5
66
777

我使用以下代码将它们放在同一行上:
print(string, end=", ")

然后我得到

5, 66, 777,

我希望最终结果是:

 5, 66, 777

如何修改代码print(string, end=", "),使得结尾没有,

上述字符串是用户输入生成的,它可以是12,3,45,98798,45等。

到目前为止我已经尝试过:

print(string[:-1], end=", ")                   #result = , 6, 77, 
print((string, end=", ")[:-1])                 #SyntaxError: invalid syntax  
print((string, end=", ").replace(", $", ""))   #SyntaxError: invalid syntax  
print(", ".join([str(x) for x in string]))     # way off result 5
                                                                6, 6
                                                                    7, 7, 7
    print(string, end=", "[:-1])                  #result 5,66,777,(I thought this will work but no change to result)
   print(*string, sep=', ')                          #result 5
                                                             6, 6
                                                             7, 7, 7 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

user input
twenty five, four, nine 

获取数据

25, 4, 9, #(that stupid comma in the end)

你的循环代码中的 string 是一个空字符串还是包含你想要打印的输入? - Joshua R.
10个回答

11

您可以在for循环中构建一个字符串列表,然后使用join打印:

strings = []

for ...:
   # some work to generate string
   strings.append(sting)

print(', '.join(strings))

或者,如果你的something有明确定义的长度(即你可以使用len(something)),你可以在结束情况下选择不同的字符串终止符:

for i, x in enumerate(something):
   #some operation to generate string

   if i < len(something) - 1:
      print(string, end=', ')
   else:
      print(string)

根据实际示例代码进行更新:

取出您的代码片段:

value = input("")
string = ""
for unit_value in value.split(", "):
    if unit_value.split(' ', 1)[0] == "negative":
        neg_value = unit_value.split(' ', 1)[1]
        string = "-" + str(challenge1(neg_value.lower()))
    else:
        string = str(challenge1(unit_value.lower()))

    print(string, end=", ")

按照上述第一个建议,我得到:

value = input("")
string = ""
strings = []
for unit_value in value.split(", "):
    if unit_value.split(' ', 1)[0] == "negative":
        neg_value = unit_value.split(' ', 1)[1]
        string = "-" + str(challenge1(neg_value.lower()))
    else:
        string = str(challenge1(unit_value.lower()))

    strings.append(string)

print(', '.join(strings))

我应该在something中添加什么? - Samir Tendulkar
@SamirTendulkar:something是你发布的代码中的内容。如果你提供更详细的示例,我很乐意进行更新。 - Joshua R.
1
@SamirTendulkar,是的,你需要将它修剪到最小的 [mcve]。我建议你在解决这个问题时回滚。 - jpp
抱歉,我已经简化了这个内容。 - Samir Tendulkar
请务必阅读@jpp的链接 - 最小化和完整性非常重要。 - Joshua R.
显示剩余2条评论

4

如果你能首先构建一个字符串列表,那么你就可以在print函数内使用序列解包并使用sep替代end

strings = ['5', '66', '777']

print(*strings, sep=', ')

5, 66, 777

@SamirTendulkar,很抱歉,我看不到你的输入。你能否更新一下你的示例,使其能够运行?例如,string = "" 并没有什么帮助。 - jpp
我使用 print(string, end=", ") 的原因是它们与 print(*strings, sep=', ') 保持在同一行,而后者会在下面打印。 - Samir Tendulkar

0
如果你的for循环除了打印之外还有其他操作,那么你可以使用这种方法来保持当前的结构。
 strings = ['5', '66', '777']

 for i in range(len(strings)-1):
      # some operation

      print(strings[i], end=', ')

 # some operation (last time)
 print(strings[-1])

5, 66, 777

如果我运行第二次打印print(strings[-1]),它会出现问题。结果是5,下一行是66,6,下一行是777,7。而print(strings[i], end=', ')输出的是5, 66, 777, - Samir Tendulkar

0
如果文本格式是一个问题,最简单的方法是像这个例子中所示,删除最后一个逗号。
letters = ["a", "b", "c", "d", "e", "f"] 

for i in letters: 
    print(f"{i}".upper(), end=", ") # some text formatting applied
    
print("\b\b ")  # This removes the last comma.


否则,
print (*letters, sep=", ") 

运行得相当不错。


0
for i in range(10):
    if(i==9):
        print(i)
    else:
        print(str(i),end=",")

输出:0,1,2,3,4,5,6,7,8,9

0
我建议您在循环内部使用if条件语句,如下所示。
x=['1','2','3','4','5']           #Driver List
for i in range(0,len(x),1):       #This loop iterates through the driver list
    if( i==len(x)-1 ):            #This checks whether i reached the last positon in iteration
        print(i)                  #If i is in the last position, just print the value of i
    else:
        print(i,end=" , ")        #If i is not in the last position, print the value of i followed by a comma

这段代码的输出结果是:

0 , 1 , 2 , 3 , 4               #Notice that no comma is printed in the last position

0

看,我已经解决了打印1到5的问题。

i = 1
while i<=5:
    print(i, end=",")
    i=i+1

输出:==> 1,2,3,4,5,

现在

lst=[]
i=1
while i<=5:
    lst.append(str(i))
    i=i+1  
print(', '.join(lst))

输出:==> 1,2,3,4,5


0
x = "环境"
j = []
for i in x:
j.append(i)

print(*j, sep = ", ")


1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是如果能够包含解释这段代码如何解决问题以及为什么这样做可以提高你的帖子质量,并且可能会得到更多的赞同。请记住,你的回答是为了未来的读者,而不仅仅是现在提问的人。请[编辑]你的回答,添加解释并指出适用的限制和假设。 - undefined

-1
list_name = [5, 10, 15, 20]
new_list = []
[new_list.append(f'({i}*{i+5})') for i in list_name] 
print(*new_list,sep="+") 

Output: (5*10)+(10*15)+(15*20)+(20*25)

4
建立一个空列表,然后使用列表推导式对其进行变异,显示你错过了列表推导式的重点。如果你还没有学习它,那么可以直接写成new_list = [f'({i}*{i+5})' for i in list_1]来完成任务。;-) (意思是:应该直接使用列表推导式构建新列表,而不是先建立空列表再用推导式改变它。如果你还没学过列表推导式,可以直接按照给出的例子写代码) - Joël

-2
for i in range(1,10):
    print(i, end="+")
    
print("10")

иѕ“е‡єпјљ

1+2+3+4+5+6+7+8+9+10

жњЂеђЋжІЎжњ‰еЉ еЏ·гЂ‚


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接