Python:<;str和int之间不支持

Python:<;str和int之间不支持,python,syntax,Python,Syntax,我正在通过自动化枯燥的东西来学习Python,我遇到了一个我不太理解的问题 我试图创建一个简单的for循环,它以以下格式打印列表的元素:W、X、Y和Z 我的代码如下所示: spam = ['apples', 'bananas', 'tofu', 'cats'] def printSpam(item): for i in item: if i < len(item)-1: print (','.join(str(item[i])))

我正在通过自动化枯燥的东西来学习Python,我遇到了一个我不太理解的问题

我试图创建一个简单的for循环,它以以下格式打印列表的元素:
W、X、Y和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)
spam=[‘苹果’、‘香蕉’、‘豆腐’、‘猫’]
def打印垃圾邮件(项目):
第i项:
如果i
我得到了这个错误的回应:

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'
回溯(最近一次呼叫最后一次):
文件“CH4_ListFunction.py”,第11行,在
打印垃圾邮件(垃圾邮件)
printSpam中第5行的文件“CH4_ListFunction.py”
如果iTypeError:“Ah,但是数组中i的
会迭代每个元素,因此
如果i
正在比较字符串(数组元素
item
)和整数(
len(item)-1:

所以,问题是您在Python中被误解了

快速修复

您可以将
替换为
范围内的i(len(数组)),因为范围的工作原理如下:

>>> 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)
因此,输出将是:

a,p,p,l,e,s
b,a,n,a,n,a,s
t,o,f,u
cand aand tand s
无论如何,我们可以做得更好

Python支持所谓的索引和负索引(从数组末尾开始)

我们有

>>> ", ".join(spam[0:-1])
'apples, bananas, tofu'

因此,您可以简单地编写函数

def printSpam(item):
    print ", ".join(item[0:-1]) + " and " + item[-1]
就这样。 它起作用了

附言:关于Python和数组表示法的一点:

>>> "Python"[::-1]
'nohtyP'

啊,但是数组中i的
会迭代每个元素,所以
如果i
比较字符串(数组元素
item
)和整数(
len(item)-1:

所以,问题是您在Python中被误解了

快速修复

您可以将
替换为范围内的i(len(数组)),因为范围的工作原理如下:

>>> 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)
因此,输出将是:

a,p,p,l,e,s
b,a,n,a,n,a,s
t,o,f,u
cand aand tand s
无论如何,我们可以做得更好

Python支持所谓的索引和负索引(从数组末尾开始)

我们有

>>> ", ".join(spam[0:-1])
'apples, bananas, tofu'

因此,您可以简单地编写函数

def printSpam(item):
    print ", ".join(item[0:-1]) + " and " + item[-1]
就这样。 它起作用了

附言:关于Python和数组表示法的一点:

>>> "Python"[::-1]
'nohtyP'

你误解了,
对。。。在…
中工作
i
已经是列表中的字符串,而不是索引,因此
基本上就是在执行
“s”<4
。这没有意义。在本例中,
i
是一个字符串。您正在尝试将字符串与列表的长度进行比较。您可以使用列表切片(如
item[0:-1]
来获取除最后一项以外的所有项目,而
item[-1]
来获取最后一项),而不是循环。用
加入第一组,然后用
连接到最后一组。@Barmar:argh,你在我回答时抢先一步:)你误解了
是如何。。。在…
中工作
i
已经是列表中的字符串,而不是索引,因此
基本上就是在执行
“s”<4
。这没有意义。在本例中,
i
是一个字符串。您正在尝试将字符串与列表的长度进行比较。您可以使用列表切片(如
item[0:-1]
来获取除最后一项以外的所有项目,而
item[-1]
来获取最后一项),而不是循环。用
加入第一组,然后用
连接到最后一组。@Barmar:argh,你在我回答时抢先一步:)这是我读过的关于Python中
表示法的最详细的解释,我有点不好意思忘记了
范围()
我的代码中的函数;代码学院至少教会了我这一点。我将返回并尝试使用不同的代码实践,看看这次我是否可以做一些不同的事情。谢谢你的回复!这是我读过的关于Python中的
表示法的
最详细的解释,我有点尴尬,因为我忘记了代码中的
range()
函数;代码学院至少教会了我这一点。我将返回并尝试使用不同的代码实践,看看这次我是否可以做一些不同的事情。谢谢你的回复!