用逗号连接单词,和"和"

Adm*_*Who 18 python list

我正在通过' 使用Python自动化无聊的东西 '.我无法弄清楚如何从下面的程序中删除最终输出逗号.目标是不断提示用户输入值,然后在列表中打印出来,并在结束前插入"和".输出应该如下所示:

apples, bananas, tofu, and cats
Run Code Online (Sandbox Code Playgroud)

我看起来像这样:

apples, bananas, tofu, and cats,
Run Code Online (Sandbox Code Playgroud)

最后一个逗号正在推动我努力.

def lister():
    listed = []
    while True:
        print('type what you want to be listed or type nothing to exit')
        inputted = input()
        if inputted == '':
            break
        else:
            listed.append(inputted+',')
    listed.insert(-1, 'and')
    for i in listed:
        print(i, end=' ')
lister()
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 43

您可以通过将格式推迟到打印时间来避免向列表中的每个字符串添加逗号.加入除最后一个之外的所有项目', ',然后使用格式化插入连接的字符串,最后一个项目由and以下项目组合:

listed.append(inputed)
...
print('{}, and {}'.format(', '.join(listed[:-1]), listed[-1]))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> listed = ['a', 'b', 'c', 'd']
>>> print('{}, and {}'.format(', '.join(listed[:-1]), listed[-1]))
a, b, c, and d
Run Code Online (Sandbox Code Playgroud)

  • 改进建议:不再推荐使用`str.format`,并且3.6增加了对新的内联格式化语法的支持,如果你想使用格式化方法,那么代码就更具可读性:`f"{','.join(已列出[:-1])}和{lists [-1]}"`.但是,我想说根本没有格式化是最可读的:`','.join(列出[: - 1])+"和"+ lists [-1]` (4认同)

Dav*_*rad 12

接受的答案是好的,但最好将此功能移动到一个单独的函数中,该函数接受一个列表,并处理列表中0,1或2项的边缘情况:

def oxfordcomma(listed):
    if len(listed) == 0:
        return ''
    if len(listed) == 1:
        return listed[0]
    if len(listed) == 2:
        return listed[0] + ' and ' + listed[1]
    return ', '.join(listed[:-1]) + ', and ' + listed[-1]
Run Code Online (Sandbox Code Playgroud)

测试用例:

>>> oxfordcomma([])
''
>>> oxfordcomma(['apples'])
'apples'
>>> oxfordcomma(['apples', 'pears'])
'apples and pears'
>>> oxfordcomma(['apples', 'pears', 'grapes'])
'apples, pears, and grapes'
Run Code Online (Sandbox Code Playgroud)


Wil*_*lva 8

这将从最后一个单词中删除逗号。

listed[-1] = listed[-1][:-1]
Run Code Online (Sandbox Code Playgroud)

它的工作方式是listed[-1]从列表中获取最后一个值。我们=用来将此值分配给listed[-1][:-1],它是列表中最后一个单词的切片,包含最后一个字符之前的所有内容。

实现如下图:

def lister():
    listed = []
    while True:
        print('type what you want to be listed or type nothing to exit')
        inputted = input()
        if inputted == '':
            break
        else:
            listed.append(inputted+',')
    listed.insert(-1, 'and')
    listed[-1] = listed[-1][:-1]
    for i in listed:
        print(i, end=' ')
lister()
Run Code Online (Sandbox Code Playgroud)