我正在寻找一种更简单(不是必须更加pythonic或更好)的方法来打印Python3中的项目列表,每个项目用逗号分隔,除了最后一项使用'和'的项目。
到目前为止我已经
了items=['foo','bar','baz']
print(','.join(items[0:-1]),'and',items[-1])
但是,我想将此作为12-13岁学生资源的一部分,而且它并不是最易读的代码。
编辑:删除列表理解。
答案 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])
我认为这个年龄段已经足够清楚了