我正在通过自动化无聊的东西来学习Python,而且我遇到了一些我不太了解的事情。
我正在尝试创建一个简单的for循环,以这种格式打印列表元素:W, X, Y, and Z
。
我的代码如下所示:
spam = ['apples', 'bananas', 'tofu', 'cats']
def printSpam(item):
for i in item:
if i < len(item)-1:
print (','.join(str(item[i])))
else:
print ("and ".join(str(item[len(item)-1])))
return
printSpam(spam)
我在回复时收到此错误:
Traceback (most recent call last):
File "CH4_ListFunction.py", line 11, in <module>
printSpam(spam)
File "CH4_ListFunction.py", line 5, in printSpam
if i < len(item)-1:
TypeError: '<' not supported between instances of 'str' and 'int'
感谢任何帮助。感谢您帮助新手。
答案 0 :(得分:5)
啊,但for i in array
遍历每个元素,因此if i < len(item)-1:
正在比较字符串(数组元素item
)和整数(len(item)-1:
)。
所以,问题是你在Python中误解了how for
works。
快速修复?
您可以将for
替换为for i in range(len(array))
,因为range
的作用如下:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
因此获得:
spam = ['apples', 'bananas', 'tofu', 'cats']
def printSpam(item):
for i in range(len(item)):
if i < len(item)-1:
print (','.join(str(item[i])))
else:
print ("and ".join(str(item[len(item)-1])))
return
printSpam(spam)
输出可能不会是你所期望的,因为'c'.join(array)
使用'c'作为数组各个元素之间的“粘合剂” - 什么是字符串,如果不是一组字符?
>>> ','.join("bananas")
'b,a,n,a,n,a,s'
因此,输出将是:
a,p,p,l,e,s
b,a,n,a,n,a,s
t,o,f,u
cand aand tand s
无论如何我们可以做得更好。
Python支持所谓的slice notation和负索引(从数组的末尾开始)。
由于
>>> spam[0:-1]
['apples', 'bananas', 'tofu']
>>> spam[-1]
'cats'
我们有那个
>>> ", ".join(spam[0:-1])
'apples, bananas, tofu'
和
>>> ", ".join(spam[0:-1]) + " and " + spam[-1]
'apples, bananas, tofu and cats'
因此,您可以简单地编写您的功能
def printSpam(item):
print ", ".join(item[0:-1]) + " and " + item[-1]
就是这样。 它有效。
P.S。:关于Python和数组表示法的一件事:
>>> "Python"[::-1]
'nohtyP'