Каков наилучший способ объединить массив в читаемый список? - PullRequest
1 голос
/ 27 апреля 2010

У меня есть массив, перечисляющий дни недели:

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

Какой самый простой / лучший способ вывести его в удобочитаемом формате:

Monday, Tuesday and Wednesday

Лучшее, что у меня есть, довольно уродливо:

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

Ответы [ 4 ]

6 голосов
/ 27 апреля 2010

Вот что я бы сделал:

'%s and %s' % (', '.join(days[:-1]), days[-1])

Я не уверен, что это красиво, но я не уверен, что так должно быть. :)

2 голосов
/ 28 апреля 2010

Почему все пытаются принудительно втиснуть это в одно выражение?

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()

И помните, это относится только к английскому языку (кроме «и», возможно, некоторых других западных языков). У других языков совершенно другие правила.

0 голосов
/ 28 апреля 2010

Я бы сделал лямбда / функцию один раз, а затем просто повторно использовал бы ее.

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.

Работает также для каждой комбинации:)

0 голосов
/ 27 апреля 2010

вам действительно не нужна эта вторая join() в вашем «лучшем» образце. Вы можете переписать это так:

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

лично я всегда предпочитаю вызывать метод класса, потому что нахожу синтаксис ближе к цели:

str.join(', ',days[:-1])+' and '+days[-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...