【问题标题】:How do I add a comma to the last string item in a list in python?如何在 python 列表中的最后一个字符串项中添加逗号?
【发布时间】:2019-11-10 18:07:26
【问题描述】:

我正在用 python 制作一个诗歌生成器,我目前正在研究如何将诗歌输出给用户。我想这样做,所以输出的每一行后面都会有一个逗号。我认为我可以通过使用 .join 函数轻松实现这一点,但它似乎附加到字母而不是存储在列表中的字符串的末尾。

line1[-1]=', '.join(line1[-1])
print(*line1)
print(*line2)

会输出如下内容:

Moonlight is w, i, n, t, e, r
The waters scent fallen snow

事后看来,我应该知道 join 是错误的函数,但我仍然迷失了方向。我尝试了 .append,但由于列表中的项目是字符串,我收到错误消息“'str' object has no attribute 'append'。”

我意识到对这一切的另一个修复可能是这样的:

print(*line1, ",")

但我正在开发一个函数,该函数将决定正确的标点符号是否需要是“!”、“、”、“?”或“--”,所以我真的希望找到一些可以附加到列表本身的字符串,而不是在输出打印过程中附加。

【问题讨论】:

  • 你能添加你的代码吗?
  • line = '{},'.format(line) 这样的东西应该可以工作——甚至line = line + ","
  • 运行这个:print(‘hi’ + ‘!’)
  • docs 开始,join 将连接给定的可迭代对象,并在其间插入调用它的字符串。因此,在您的示例中,我猜您的 line1 是一个单词列表,并且您正在使用逗号连接最后一个单词 (line1[-1]) 的字符。如果您使用的是单词列表(在打印时与 * 的用法相匹配),只需将逗号附加到该单词列表即可。

标签: python string list join append


【解决方案1】:

只需对字符串使用++= 运算符,例如:

trailing_punct = ',' # can be '!', '?', etc.

line1 += trailing_punct
# or
line1 = line1 + trailing_punct

+= 可用于修改字符串“就地”(注意,在幕后,它确实会创建一个新对象并分配给它,因此id(line1) 在此操作后会发生变化)。

【讨论】:

    【解决方案2】:

    您的 line1line2 似乎是字符串列表,所以我首先假设:

    line1 = ["Moonlight", "is", "winter"]
    line2 = ["The", "waters", "scent", "fallen", "snow"]
    

    当给定多个字符串参数以在单词之间添加空格时,您正在使用 print 函数的默认行为:print(*line1) 等效于调用 print(line1[0], line1[1], ...)(请参阅 *args and **kwargs)。

    这使得将行分隔符添加到该行的单词列表中是不够的,因为它之前会有一个空格:

    print("\n--//--\nUsing print default space between given arguments:")
    line_separator = ","
    line1.append(line_separator)
    print(*line1)
    print(*line2)
    

    结果:

    --//--
    Using print default space between given arguments:
    Moonlight is winter ,
    The waters scent fallen snow
    

    你想要做的可以通过将单词列表连接成一个字符串,然后用你想要的分隔符连接行列表来完成:

    print("\n--//--\nPrinting a single string:")
    line1_str = ' '.join(line1)
    line2_str = ' '.join(line2)
    line_separator = ",\n"  # notice the new line \n
    lines = line_separator.join([line1_str, line2_str])
    print(lines)
    

    结果

    --//--
    Printing a single string:
    Moonlight is winter,
    The waters scent fallen snow
    

    考虑使用行列表以便于扩展,并可能为每行按顺序使用分隔符列表。

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 2012-03-19
      • 2011-06-10
      • 2021-11-11
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      相关资源
      最近更新 更多