好吧,我是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)
而且,当我尝试执行此操作时,我收到此错误消息:
>>>
Traceback (most recent call last):
File "/Users/Hersh/Desktop/Python/ascii_conversion.py", line 16, in <module>
aValues = ascii()
File "/Users/Hersh/Desktop/Python/ascii_conversion.py", line 10, in ascii
c = ord(List[x[y]])
TypeError: 'int' object is not subscriptable
>>>
究竟是什么问题,我该如何解决?
答案 0 :(得分:2)
如错误消息所示,错误的行是
c = ord(List[x[y]])
x
是一个整数(如0
)。相反,你想要:
c = ord(List[x][y])
即。取x
的{{1}}元素(它本身就是一个列表),然后取List
个元素。
但是,您的迭代方法非常简单。你永远不会使用y
变量,但你应该这样做。例如,写一行的较短方式是:
item
使用map
和list comprehensions,您可以将代码缩减为:
c = ord(item)
答案 1 :(得分:1)
索引到二维列表的正确方法不是:
c = ord(List[x[y]])
但相反:
c = ord(List[x][y])
您的错误来自x [y]是无效子表达式的事实,因为x是整数,[]是下标运算符。你不能下标一个整数。
但是,您实际上并不需要索引到列表中来完成同样的事情:
def ascii():
x = 0 ## redundant
y = 0 ## redundant
aValues = [[],[],[]]
for item in List:
for item in List[x]: ## you are reusing 'item', change the name here to 'subItem'
c = "0" ## redundant
c = ord(List[x[y]]) ## redundant, replace with: c = ord(subItem)
y = y + 1 ## redundant
aValues[x].append(c)
x = x + 1 ## redundant
答案 2 :(得分:1)
嗯。不幸的是,你在这里遇到了很多问题。它们主要源于你对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)
。
希望这有帮助。
答案 3 :(得分:1)
我不确定你想要用该函数做什么,它有几个错误。试试这个并告诉我这是否是你想要的:
List = [["W", "w"], ["A", "A"], ["a", "a"]]
aValues = [[ord(e1), ord(e2)] for e1, e2 in List]
print(aValues)
编辑1:
或者,如果每个子列表包含两个以上的元素,则此版本更好,并且适用于一般情况:
aValues = [map(ord, pair) for pair in List]
编辑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]]
答案 4 :(得分:0)
将第10行更改为
c = ord(item)
答案 5 :(得分:0)
x实际上不是一个数组。这是一个你正在递增的整数。
您需要弄清楚您尝试做什么,并查找适当的语法。目前还不清楚x [y]应该代表什么。