将数组加入可读列表的最佳方法是什么?

时间:2010-04-27 18:41:42

标签: python join string

我有一个列出一周中几天的数组:

days = ['Monday', 'Tuesday', 'Wednesday']

以人类可读的格式输出它的最简单/最好的方法是什么:

Monday, Tuesday and Wednesday

我所拥有的最好的是相当难看的:

', '.join(days[:-2]+['']) + ' and '.join(days[-2:])

4 个答案:

答案 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]