Есть ли более простой способ сделать читаемый на английском языке список из строк в кортеже?

Я просматриваю какой-то старый код, я написал функцию ниже с помощью цикла C-style for-loop с переменной count. Затем я исправил его новыми знаниями, но все же подозрюю, что есть даже лучший способ сделать это.

Функция должна вести себя так:

>>> join_list(['a'])
'a'
>>> join_list(['a', 'b'])
'a or b'
>>> join_list(['a', 'b', 'c'])
'a, b, or c'

Теперь у меня есть функция:

def join_list(my_list):
    length = len(my_list)
    if length == 1:
        return my_list[0]
    elif length == 2:
        return ' or '.join(my_list)
    else:
        head = ', '.join(my_list[:-1])
        return head + ', or ' + my_list[-1]
11 голосов | спросил Winny 8 FebruaryEurope/MoscowbSat, 08 Feb 2014 06:21:48 +0400000000amSat, 08 Feb 2014 06:21:48 +040014 2014, 06:21:48

2 ответа


8

Выглядит неплохо. Единственная проблема, которую я вижу, это то, что вы не делаете проверку, чтобы убедиться, что список не пуст: если это так, вы попытаетесь получить доступ к my_list[-1] в последнем объявлении else, который поднимет код IndexError

Следовательно, я бы просто добавил проверку перед length == 0 и return '' в этом случае.

ответил Yuushi 8 FebruaryEurope/MoscowbSat, 08 Feb 2014 06:31:55 +0400000000amSat, 08 Feb 2014 06:31:55 +040014 2014, 06:31:55
2

Вы также можете написать, немного короче:

def join_list(items):
    if not items:
        return ''
    *init, last = map(str, items)
    return (', '.join(init) + ' or '*bool(init) + last)

Пример:

>>> join_list(range(5))
'0, 1, 2, 3 or 4'
ответил Lennart_96 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 05:10:50 +0400000000amSun, 09 Feb 2014 05:10:50 +040014 2014, 05:10:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132