【问题标题】:Add trailing space to list of strings在字符串列表中添加尾随空格
【发布时间】:2012-04-16 15:27:40
【问题描述】:

我有一个这样的字符串列表:

my_list = ['Lorem ipsum dolor sit amet,', 'consectetur adipiscing elit. ', 'Mauris id enim nisi, ullamcorper malesuada magna.']

我想基本上将这些项目组合成一个可读的字符串。我的逻辑如下:

If the list item does not end with a space, add one
otherwise, leave it alone
Then combine them all into one string.

我能够通过几种不同的方式来实现这一点。

使用列表推导:

message = ["%s " % x if not x.endswith(' ') else x for x in my_list]
messageStr = ''.join(message)

拼写出来(我认为这更具可读性):

for i, v in enumerate(my_list):
    if not v.endswith(' '):
        my_list[i] = "%s " % v
messageStr = ''.join(my_list)

我的问题是,有没有更简单、“更理智”的方式来实现这一点?

【问题讨论】:

  • 这有什么不“理智”的?
  • 嗯,这本身并不完全是疯狂的,但我可以看出我让事情变得更加困难。幸运的是,Nolen 找到了一个很好的解决方案。

标签: python string list whitespace concatenation


【解决方案1】:
>>> my_list = ['Lorem ipsum dolor sit amet,', 'consectetur adipiscing elit. ', 'Mauris id en
im nisi, ullamcorper malesuada magna.']
>>> ' '.join(string.strip() for string in my_list)
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris id enim nisi, ullamcorper
 malesuada magna.'

【讨论】:

  • 谢谢!这更有意义。一个问题,为什么使用 rstrip() 而不是 strip()?
  • 我最初使用的是strip,但你说你正在处理以空格“结束”的字符串,所以我认为我们只需要去掉右侧的空格/我不想要删除左侧重要的空格。如果我错了,我很乐意将其更改为剥离。
  • 在我的脚本中,我从数据库中获取这些字符串(每一行都有部分消息)。从我目前看到的情况来看,数据是各种各样的混乱。我想我会安全并使用 strip(),因为连接应该注意在 strip() 之后分隔句子。
  • 您应该使用生成器表达式而不是列表推导式来避免生成临时列表。只需将[] 退出加入即可
  • 恢复为脱衣舞。感谢@gnibbler 的提示,你总是在这些事情之上:D
【解决方案2】:

您可以使用strip 简单地理解列表:

' '.join([x.strip() for x in list])

最好不要将您的列表称为“列表”,因为它是内置的。

【讨论】:

  • 好主意,我已经更改了原始问题中的变量名。谢谢。
猜你喜欢
  • 2021-06-08
  • 2022-06-20
  • 2011-09-16
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
相关资源
最近更新 更多