【发布时间】:2020-04-24 19:24:51
【问题描述】:
我想使用列表推导来修改列表。像这样的:
c = [10,20,30,40,50,60,70,80,90]
a = [0,1,2]
b = [3,4,5]
c[a[jj]] = [c[a[jj]]+c[b[jj]] for jj in range(len(a))]
我的预期输出:
c = [50,70,90,40,50,60,70,80,90]
但是每次出现错误:
c[a[jj]] = [c[a[jj]]+c[b[jj]] for jj in range(len(a))]
NameError: name 'jj' is not defined
我在这里做错了什么?
编辑: 我试图在不使用 for 循环的情况下复制下面的语句:
for jj in range(len(a)):
c[a[jj]] = c[a[jj]] + c[b[jj]]
【问题讨论】:
-
是否只是为了描绘您想要的结果而对列表中的元素进行洗牌?
-
[jj] 变量未在理解括号外定义。理解生成列表,您尝试将其分配给索引为 [jj] 的嵌套列表,但您的主要代码块不知道 [jj] 是什么。
-
列表推导将返回一个列表。除了没有在列表理解之外定义 JJ 之外,您似乎正在尝试将新列表分配给 c 的特定索引 (a[JJ]),这与您的输出不符。
-
Python 将右侧的表达式完全评估为单个匿名对象,然后将该对象分配给左侧。
jj早已不复存在。 -
您想就地修改
c还是使用结果创建一个新列表?修改c时,通常首选 for 循环而不是列表推导,因为修改现有列表的唯一方法是使用副作用。
标签: python list list-comprehension