我刚刚开始学习Python,我将在一章结尾处进行练习。到目前为止,我在本书中学到的只是基础知识,流程控制,功能和列表。
练习是:
逗号代码
假设您有一个像这样的列表值:
垃圾邮件= ['苹果','香蕉','豆腐','猫']
编写一个将列表值作为参数并返回的函数
一个字符串,其中所有项目用逗号和空格分隔,带有“和”
在最后一项之前插入。例如,将之前的垃圾邮件列表传递给
该功能将返回'苹果,香蕉,豆腐和猫'。但是你的功能
应该能够处理传递给它的任何列表值。
要解决此问题,我使用以下代码(python 3.x.x)。我想知道是否有更好的方法来做到这一点。它花了一些试验和错误,但我摸索了它,直到我得到它:
<div class="ckeditordata">
//1st element is unknown
//can be <p>, <ul>, <ol>
</div>
答案 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
.
.
.