Python3 - 从列表中打印一个字符串,用逗号分隔n#39;和#39;在列表中的最后一项之前

时间:2015-03-11 15:09:49

标签: python list printing

我正在寻找一种更简单(不是必须更加pythonic或更好)的方法来打印Python3中的项目列表,每个项目用逗号分隔,除了最后一项使用'和'的项目。

到目前为止我已经

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

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

编辑:删除列表理解。

4 个答案:

答案 0 :(得分:3)

您可以使用format方法:

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

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

答案 1 :(得分:2)

打破它并评论它 - 以更高级的方式进行练习可能是一种练习,例如:

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)

答案 2 :(得分: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))

答案 3 :(得分:0)

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

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

我认为这个年龄段已经足够清楚了