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

时间:2016-01-14 04:59:48

标签: python

我刚刚开始学习Python,我将在一章结尾处进行练习。到目前为止,我在本书中学到的只是基础知识,流程控制,功能和列表。

练习是:
逗号代码
假设您有一个像这样的列表值: 垃圾邮件= ['苹果','香蕉','豆腐','猫']

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

要解决此问题,我使用以下代码(python 3.x.x)。我想知道是否有更好的方法来做到这一点。它花了一些试验和错误,但我摸索了它,直到我得到它:

<div class="ckeditordata">

//1st element is unknown
//can be <p>, <ul>, <ol>
</div>

4 个答案:

答案 0 :(得分:5)

实现此目的的另一种方法是使用切片和连接:

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

这是使用相同核心概念的上述函数的更易读的版本。

def listFunc(lst):
    if len(lst) == 0: return ''      #no elements? empty string
    if len(lst) == 1: return lst[0]  #one element? no joining/separating to do, just give it back
    firstPart = lst[:-1]             #firstPart is now everything except the last element
    retFirst = ", ".join(firstPart)  #retFirst is now the first elements joined by a comma and a space.
    retSecond = ", and " + lst[-1]   #retSecond is now ", and [last element]"
    return retFirst + retSecond;

我认为这里唯一可能令人困惑的是切片语法,负索引和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

答案 1 :(得分:4)

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

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中这样做的方式,但应该有利于学习目的。

答案 2 :(得分:4)

让我们玩Python 3并保持简单:

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

答案 3 :(得分:1)

您可以使用enumerate

缩短一点
def printList():
    # x will be the string in the list, y will be an integer
    aString = ""
    for (y,x) in enumerate(myList):
        if y < len(myList) - 1:
            aString = aString + x + ", "
        else:
            aString = aString + "and " + x
    .
    .
    .