我刚开始使用Python,现在是用python自动化无聊的东西的第4章的末尾。这个项目是使用一个函数来分隔列表中所有的值,逗号和前面有',and‘的最后一个值,以便在程序运行时读取:
苹果、香蕉、豆腐和猫
下面是完整的代码:
spam = ['apples', 'bananas', 'tofu', 'cats']
def listFunc(lst):
if len(lst) == 0: return ''
if len(lst) == 1: return lst[0]
firstPart = lst[:-1]
retFirst = ", ".join(firstPart)
retSecond = ", and " + lst[-1]
return retFirst + retSecond;
print(listFunc(spam))
我的问题在于以下几行:
firstPart = lst[:-1]
retFirst = ", ".join(firstPart)
retSecond = ", and " + lst[-1]
我的想法是,这里的第一行是创建变量firstPart,并将列表分配给它,直到但不包括最后一个值(cats)。
然后,这里的第二行是创建变量retFirst并将其赋给它,列表中的每个值在末尾都有一个逗号和空格,如下所示:苹果、香蕉、豆腐
最后,最后一行创建变量retSecond并将列表的最后一个值( lst-1 )赋值给它,但在它前面加上",and“,因为lst-1在+运算符之后。
然后在函数ListFunc的最后一行相加,在我看来它应该是这样的:
(苹果、香蕉、豆腐、)+(和猫)
苹果、香蕉、豆腐和猫<-两个逗号
但它是以正确的方式出现的,而不是我认为的方式。它为什么要这样做?
为什么不能删除中的逗号
retFirst = ", and " + lst[-1]
并使其连续不带两个逗号。我以为firstPart包含了列表中的前三个值,但我显然错了。
请帮助我了解.join在这里是如何工作的。
发布于 2017-01-30 07:05:53
原因是当你做join
的时候会做这样的事情。
yourList = ['1', '2', '3', '4']
print("$".join(yourList))
输出将是,
1$2$3$4
因为join
将joining string
放在列表项之间,而不是每个列表项的末尾。
在你的情况下,
firstPart = lst[:-1] #<-- list : ['apples', 'bananas', 'tofu']
retFirst = ", ".join(firstPart) #<-- string: apples, bananas, tofu
retSecond = ", and " + lst[-1] #<-- string: , and cats
return retFirst + retSecond #<-- string: apples, bananas, tofu, and cats
https://stackoverflow.com/questions/41930074
复制相似问题