我有一个列出一周中几天的数组:
days = ['Monday', 'Tuesday', 'Wednesday']
以人类可读的格式输出它的最简单/最好的方法是什么:
Monday, Tuesday and Wednesday
我所拥有的最好的是相当难看的:
', '.join(days[:-2]+['']) + ' and '.join(days[-2:])
答案 0 :(得分:6)
以下是我要做的事情:
'%s and %s' % (', '.join(days[:-1]), days[-1])
我不确定它很漂亮,但我不确定它是否也是。 :)
答案 1 :(得分:2)
为什么每个人都试图将其强制适合单个表达式?
def comma_separated(lst):
"""
>>> comma_separated(['a'])
'a'
>>> comma_separated(['a', 'b'])
'a and b'
>>> comma_separated(['a', 'b', 'c'])
'a, b and c'
"""
if len(lst) == 1:
return lst[0]
comma_part = ", ".join(lst[:-1])
return "%s and %s" % (comma_part, lst[-1])
if __name__ == "__main__":
import doctest
doctest.testmod()
请记住,这是针对英语的(除了“和”,可能还有其他一些西方语言)。其他语言有完全不同的规则。
答案 2 :(得分:0)
我会做一次lambda / function然后再重复使用它。
def days(*d):
''.join([i + ((n < len(d) - 2 and ', ') or ' and ') for n, i in enumerate(d)])[:-5] + '.'
print days('Monday', 'Tuesday', 'Wednesday')
>>> Monday, Tuesday and Wednesday.
print days('Monday', 'Tuesday')
>>> Monday and Tuesday.
print days('Monday', 'Tuesday')
>>> Monday.
也适用于每种组合:)
答案 3 :(得分:-1)
你真的不需要你的'最佳'样本中的第二个join()
。你可以用这种方式重写它:
', '.join(days[:-1])+' and '+days[-1]
个人而言,我总是喜欢调用类方法,因为我发现语法更接近于意图:
str.join(', ',days[:-1])+' and '+days[-1]