有没有更好的方法来完成这个python练习?(初学者)

2024-05-19 05:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始学习Python,在一章的最后我要做一个练习。到目前为止,我在这本书中所学到的都是非常基础的,流控制,函数和列表。在

练习是:
逗号代码
假设您有这样一个列表值: spam=[“苹果”,“香蕉”,“豆腐”,“猫”]

编写一个以列表值为参数并返回 一个字符串,其中所有项用逗号和空格隔开,并带有“and” 在最后一项之前插入。例如,将以前的垃圾邮件列表传递给 函数将返回“苹果、香蕉、豆腐和猫”。但是你的功能 应该能够处理传递给它的任何列表值。在

为了解决这个问题,我使用以下代码(python3.x.x)。我想知道有没有更好的办法。这是一个小的尝试和错误,但我摸索着通过它,直到我得到这个:

myList = ['apples', 'bananas', 'tofu', 'cats']
myList2 = ['apples', 'bananas', 'tofu', 'cats', 'added1', 'added2']
def listFunc(List):
        x = 0
        for i in List:
                x += 1
                if x < len(List):
                        print(i, end=' ')
                elif x == len(List):
                        print('and ' + i)
listFunc(myList2)

Tags: and函数代码苹果列表list逗号香蕉
3条回答

让我们来享受一下Python 3的乐趣,并保持它的简单性:

def listFunc(myList):
    *rest, last = myList
    return ", ".join(rest) + (", and " if rest else "") + last

另一种方法是使用切片和连接:

def listFunc(lst):
    if len(lst) == 0: return ''
    if len(lst) == 1: return lst[0]
    return ", and ".join([", ".join(lst[:-1]), lst[-1]])

下面是使用相同核心概念的更具可读性的上述函数版本。在

^{pr2}$

我认为这里唯一可能混淆的部分是片语法、负索引和string.join

代码lst[:-1]表示get everything in lst excepting the last element这是一个列表片段

代码lst[-1]表示get the last element in lst,这是负索引

最后,代码", ".join(firstPart)表示get a string containing each element in firstPart separated by a comma and a space

这里是一个简单的函数版本,它没有使用任何非常“花哨”的东西,初学者应该可以理解它。切片可能是这里最先进的东西,但如果你浏览一下列表,应该没问题。它还处理空列表和一项列表的两种特殊情况。在

def listFunc(List):
    if len(List) == 0: return ''
    if len(List) == 1: return List[0]

    value = List[0]
    for item in List[1:-1]:
        value = value + ', ' + item
    return value + ', and ' + List[-1]

这不是通常在Python中使用的方法,但是对于学习来说应该是很好的。在

相关问题 更多 >

    热门问题