Python错误:Int object not subscriptab

2024-04-25 06:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我是python的新手,下面是有问题的代码片段:

<!-- language: lang-py -->

List = [["W","w"],["A","A"],["a","a"]]

def ascii():
    x = 0
    y = 0
    aValues = [[],[],[]]
    for item in List:
        for item in List[x]:
            c = "0" 
            c = ord(List[x[y]])
            y = y + 1
            aValues[x].append(c)
        x = x + 1

    return aValues
aValues = ascii()
print (aValues)

当我尝试执行此操作时,会收到以下错误消息:

^{pr2}$

到底是什么问题,我如何解决它?在


Tags: 代码inpylangforreturndefascii
3条回答

嗯。不幸的是你有很多问题。它们主要源于您对Python中循环的误解。在

执行for item in List时,item依次设置为列表中的每个元素。因此,您不能在下一行执行for item in List[x]这没有意义。item已经是内部列表了,所以您需要执行for inner_item in item(或者,调用外部列表变量更合理的方法)。在

接下来的两行也毫无意义。不需要将c设置为“0”,然后立即将其设置为其他值。别忘了,正如我上面所说的,你已经在内部循环中有了这个项目,我们称之为inner_item。所以你的代码应该是c = ord(inner_item)。在

希望这有帮助。在

我不知道你到底想用这个函数做什么,它有几个错误。试试这个,告诉我这是不是你想要的:

List = [["W", "w"], ["A", "A"], ["a", "a"]]
aValues = [[ord(e1), ord(e2)] for e1, e2 in List]
print(aValues)

编辑1:

或者,如果每个子列表包含两个以上的元素,则此版本更好,适用于一般情况:

^{pr2}$

编辑2:

根据注释,您需要使用一个函数。好的,那么让我们将解决方案实现为一个函数-首先,函数的输入应该作为参数接收,而不是像当前在代码中那样作为全局变量(List)。然后,将返回结果,我将借此机会展示另一种解决当前问题的方法:

def ascii(lst):
    return [[ord(element) for element in pair] for pair in lst]

这样使用:

List = [["W", "w"], ["A", "A"], ["a", "a"]]
ascii(List)
> [[87, 119], [65, 65], [97, 97]]

如错误消息所示,错误的行是

c = ord(List[x[y]])

x是一个整数(类似于0)。相反,您需要:

^{pr2}$

也就是说,取List的第x-第个元素(它本身就是一个列表),然后取该元素的第y-个元素。在

然而,你的迭代方法是非常不和谐的。您永远不会使用item变量,但应该使用。例如,一种简短的书写方式是:

c = ord(item)

通过使用^{}list comprehensions,可以将代码缩减为:

def ascii():
   return [map(ord, l) for l in List]

相关问题 更多 >