在Python中使用逗号连接或打印列表元素,末尾带有逗号

11
  • item1
  • item2
  • item3
>>> l = ['1', '2', '3', '4']

如果我使用join语句,

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

输出结果为:

'1, 2, 3, 4'

但是,如果我希望输出如下:

'1, 2, 3, 4,'

(我知道可以使用字符串拼接,但我想知道更好的方法)

.

8个回答

14

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

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列表!):

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

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

你可能想要将所有选项中的 l 改为 s 或者反过来? - okm
map(lambda) is ugly IMO. Use a generator expression instead: '%s,' % x for x in l - wjandrea

7
如果你使用的是Python 3,你可以利用内置的print函数:
print(*l, sep=', ', end=',')
  • *l会将元素列表解包以将它们作为单独的参数传递给打印函数。
  • sep是一个可选参数,用于在打印时在元素之间设置间隔符号。在这里,我将其设置为', ',并加上一个空格,以满足您的要求。
  • end是一个可选参数,将被添加到结果字符串的末尾。我将其设置为',',不带空格,以满足您的需求。

您可以在Python 2.6及以上版本中通过导入打印函数来使用它。

from __future__ import print_function

然而,这种方法有几个注意事项:
  • 假设您想要在stdout中输出结果字符串; 或者您可以使用file可选参数将输出重定向到文件中。
  • 如果您使用Python 2,则__future__导入可能会破坏代码兼容性,因此如果其余代码不兼容,则需要将您的代码隔离在单独的模块中。
长话短说,无论是这种方法还是其他提出的答案,都需要花费很多精力来避免只需在join结果字符串末尾添加+','

5
要使用 str.join() 方法,可迭代对象(例如列表)中的元素必须是字符串。如果你想要在最后一个元素后加上逗号,只需在列表末尾添加一个空字符串即可。 编辑说明:稍微详细解释一下:
l = map(str, [1,2,3,4])
l.append('')
s = ','.join(l) 

谢谢@MichaelWild - 我一直在想为什么我的代码中会出现尾随逗号,结果发现是因为我数组中的最后一个条目是空字符串。干杯! - sdaau

1

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

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

或者让它更加DRY

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

在后者中,`rstrip()` 仅用于删除最后的尾随空格(`sep` 的一部分),因为这不是您期望的输出。这并不是最便宜的方法,但很清晰明了。

@aix:我同意这个要求。 - Tadeck
@aix:并不完全是这样。想象一下,他们的分隔符可能比逗号更复杂(甚至可能是一个表达式),而且他们不想重复使用它两次或使用临时变量。在我看来,这是非常合理的。 - georg
@thg435:好的,在楼主的例子中,这两个分隔符不是相同的。一个是 ", ",另一个是 ","(注意缺少空格)。因此,我并不认为你的论点适用于这里。 - NPE

1
首先,','.join(l)根本不起作用,因为它要求元素是字符串,而它们不是。
您可以这样修复并添加尾随逗号:
In [4]: ', '.join(map(str, l)) + ','
Out[4]: '1, 2, 3, 4,'

我认为这是目前最干净的方法。


1

如果你不想使用连接,事情可能会有些棘手...

>>> l = [1, 2, 3, 4]
>>> repr(l+[0])[1:-3] # or str
'1, 2, 3, 4,'

0

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

>>> l = ['1', '2', '3', '4']
>>> ' '.join(x+',' for x in l)
'1, 2, 3, 4,'

0

我不确定这是否是您要找的?但它确实有效。

l = [1,2,3,4]

for num in l: print(str(num), end=", ")


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