Python3 - 从列表中打印一个字符串,在列表的最后一项之前用逗号分隔 'and'

Python3 - print a string from a list, seperated by commas with an 'and' before the last item in a list

我正在寻找一种更简单(不一定更像 pythonic 或更好)的方法来打印 Python3 中的项目列表,每个项目都用逗号分隔,除了最后一个项目使用 'and'.

到目前为止我有

items=['foo','bar','baz']
print(','.join(items[0:-1]),'and',items[-1])

但是,我想将它用作 12-13 岁学生资源的一部分,它并不是最易读的代码。

编辑:删除列表理解。

您可以使用format方法:

 print("{} and {}".format(",".join(items[:-1]), items[-1]))

第一个 {} 将填充除最后一个元素之外的所有元素的 join,然后您只打印最后一个元素。

假设您的列表至少包含 2 个字符串:

print(','.join(items[:-1]) + ' and ' + items[-1])

我想这对那个年龄段的人来说已经足够清楚了

这可能更容易阅读:

items=['foo','bar','baz']

for i, item in enumerate(items):
    if i == len(items) - 1:
        print('and ' + item)
    else:
        print(item + ',',end=' ')

>>> foo, bar, and baz

已为 Python3 更新,我也想到了这个(非常相似):

items=['foo', 'tri', 'baz']

s = ''
for i, item in enumerate(items):
    if i == len(items) - 1:
        s += 'and {}'
    else:
        s += '{}, '

print(s.format(*items))

只需将其分解并对其进行评论 - 它可以作为一种练习,以更高级的方式进行,例如:

if not items:
    print('')
elif len(items) == 1:
    print(items[0])
elif len(items) == 2:
    print(' and '.join(items)) # or to show `print` options
    # print(*items, sep=' and ')
else:
    words, last_word = items[:-1], items[-1]
    print(', '.join(words), 'and', last_word)

利用Py3.x的扩展解包,可以使最后一个为:

else:
    *words, last_word = items
    print(', '.join(words), 'and', last_word)

或者,只需在批次上强制使用 ', '.join,并在最后一个 ', ' 上拆分,然后根据您是否有分隔符,适当打印。

words, sep, last = ', '.join(items).rpartition(', ')
if sep:
    print(words, 'and', last)
else:
    print(last)