用 class 实例替换列表元素

Replace list element with class instance

我有一个 class 可以将 [1, 2] 之类的列表转换为符号。它需要 2 个位置参数,对应于列表中的每个元素。我正在制作另一个函数,它接受参数列表,例如这个列表:

lst = [[1,2], None, [1,1]]

并将其转换为具有符号 ◇ ◯ 的列表,而不是子列表。我编写了这段代码来执行此操作,但它告诉我列表索引必须是整数,而不是列表。

newlist = [SymbolClass(l[l][0],l[l][1]) if l is not None else l for l in lst]

我应该如何更改我的代码才能使其正常工作?

您正在尝试使用 l 为列表编制索引,但 l 是列表元素,而不是索引。尝试

newlist = [SymbolClass(l[l][0],l[l][1]) if l is not None else l for l in range(len(lst))]

顺便说一句,l 并不是一个很好的 single-character 变量名,因为它通常看起来像数字 1.

但是,没有必要使用显式索引。一种更简洁的写法是

newlist = [SymbolClass(x[0],x[1]) if x is not None else x for x in lst]