10

我有一个清单:

>>> l = ['1', '2', '3', '4']

如果我使用 join 语句,

>>> s = ', '.join(l)

会给我输出:

'1, 2, 3, 4'

但是,如果我想要输出为:

'1, 2, 3, 4,'

(我知道我可以使用字符串 concat 但我想知道一些更好的方法)

.

4

8 回答 8

13

字符串连接是最好的方法:

l = ['1', '2', '3', '4']  # original list
s = ', '.join(l) + ','

但您还有其他选择:

  1. 映射到逗号结尾的字符串,然后加入:

    l = ['1', '2', '3', '4']  # original list
    s = ' '.join(map(lambda x: '%s,' % x, l))
    
  2. 将空字符串附加到加入列表(不要修改原始l列表!):

    l = ['1', '2', '3', '4']  # original list
    s = ', '.join(l + ['']).rstrip(' ')
    
  3. 使用字符串格式代替连接:

    l = ['1', '2', '3', '4']  # original list
    s = '%s,' % (', '.join(l))
    
于 2012-04-25T07:41:53.017 回答
6

如果您使用的是 Python 3,则可以利用 print 内置函数:

print(*l, sep=', ', end=',')
  • *l解包元素列表以将它们作为单独的参数传递给打印
  • sep是一个可选参数,设置为从元素打印的元素之间,这里我将它设置', '为您需要的空格
  • end是一个可选参数,将在结果打印字符串的 and 处推送。我将其设置为','没有空间以满足您的需要

您可以通过导入 print 函数从 Python 2.6 开始使用它

from __future__ import print_function

然而,这样做有几个警告:

  • 这是假设您要在 stdout 中输出结果字符串;或者您可以使用file可选参数将文件中的输出重定向到文件中
  • 如果您使用的是 Python 2,则__future__导入可能会破坏您的代码兼容性,因此如果您的其余代码不兼容,您需要将代码隔离在单独的模块中。

长话短说,无论是这种方法还是其他建议的答案,都需要付出很多努力来避免只在结果字符串+','的末尾添加 ajoin

于 2012-04-25T09:14:04.263 回答
5

为了str.join()工作,包含在可迭代对象(即此处的列表)中的元素本身必须是字符串。如果你想要一个尾随逗号,只需在列表末尾添加一个空字符串。

编辑:充实一下:

l = map(str, [1,2,3,4])
l.append('')
s = ','.join(l) 
于 2012-04-25T07:40:58.310 回答
1

要包含您显示的空格,您需要在分隔符字符串中有一个空格:

s = ", ".join(l) + ","

或将其设为 DRYer

sep = ", "
s = (sep.join(l) + sep).rstrip()

在后者中,rstrip()仅用于删除最后的尾随空格(部分sep),因为这不在您想要的输出中。这不是最便宜的方法,但很清楚。

于 2012-04-25T07:39:42.463 回答
1

首先,','.join(l)根本不起作用,因为它要求元素是字符串,而它们不是。

您可以修复它并添加尾随逗号,如下所示:

In [4]: ', '.join(map(str, l)) + ','
Out[4]: '1, 2, 3, 4,'

我认为这是迄今为止最干净的方法。

于 2012-04-25T07:41:04.013 回答
1

如果你不想串联,事情可能会很糟糕......

>>> l = [1, 2, 3, 4]
>>> repr(l+[0])[1:-3] # or str
'1, 2, 3, 4,'
于 2012-04-25T08:46:02.397 回答
0

这个 IDLE 会话是一个很好的例子,展示了如何将列表元素拉入带有尾随逗号的字符串中:

>>> l = ['1', '2', '3', '4']
>>> ' '.join(x+',' for x in l)
'1, 2, 3, 4,'
于 2012-04-25T13:18:33.240 回答
0

不知道这是不是你要找的?它虽然有效。

l = [1,2,3,4]

对于 l 中的 num: print(str(num), end=", ")

于 2017-12-31T16:09:07.423 回答