Python:< str和int之间不支持

时间:2016-08-11 16:21:33

标签: python syntax

我正在通过自动化无聊的东西来学习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'

感谢任何帮助。感谢您帮助新手。

1 个答案:

答案 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'