从列表语法上正确的人类可读字符串(带有牛津逗号)

Acu*_*nus 3 python list human-readable

我想要列表的语法上正确的人类可读的字符串表示形式。例如,列表['A', 2, None, 'B,B', 'C,C,C']应返回字符串A, 2, None, B,B, and C,C,C。这个人为的例子有些必要。请注意,牛津逗号与此问题有关。

我试过了,', '.join(seq)但是对于上述示例并没有产生预期的结果。

请注意预先存在的类似问题:

Acu*_*nus 10

此功能通过处理小列表而不是大列表来工作。

from typing import Any, List

def readable_list(seq: List[Any]) -> str:
    seq = [str(s) for s in seq]
    if len(seq) < 3:
        return ' and '.join(seq)
    return ', '.join(seq[:-1]) + ', and ' + seq[-1]
Run Code Online (Sandbox Code Playgroud)

用法示例:

readable_list([])
''

readable_list(['A'])
'A'

readable_list(['A', 2])
'A and 2'

readable_list(['A', None, 'C'])
'A, None, and C'

readable_list(['A', 'B,B', 'C,C,C'])
'A, B,B, and C,C,C'

readable_list(['A', 'B', 'C', 'D'])
'A, B, C, and D'
Run Code Online (Sandbox Code Playgroud)