Python 如何使用赋值运算符左侧的列表理解?

Python 如何使用赋值运算符左侧的列表理解?,python,list-comprehension,Python,List Comprehension,我的代码部分是: v=[7,0,2,5,1] # list with any numbers x={2,0,4} # set of indexes (where element of x < len(v) has been provided) for i in x: # this for loop is working v[i]-=10 print(v)

我的代码部分是:

v=[7,0,2,5,1]               # list with any numbers
x={2,0,4}                   # set of indexes (where element of x < len(v) has been provided)
for i in x:                 # this for loop is working
    v[i]-=10
print(v)                    # good result
[-3, 0, -8, 5, -9]
v=[7,0,2,5,1]#列出任意数字
x={2,0,4}#一组索引(其中提供了x
我的问题是如何用列表理解或其他更紧凑的表达式替换上面的for循环? 注:打印仅显示v的新值 但任务是只修改原始v列表的某些元素。

我认为您需要:

v = [i-10 if idx in x else i for idx,i in enumerate(v)])
print(v)
输出:

[-3, 0, -8, 5, -9]
我认为你需要:

v = [i-10 if idx in x else i for idx,i in enumerate(v)])
print(v)
输出:

[-3, 0, -8, 5, -9]

您可以尝试列表理解:

print([v - 10 if i in x else v for i,v in enumerate(v)])

您可以尝试列表理解:

print([v - 10 if i in x else v for i,v in enumerate(v)])

这并不能完全回答这个问题,但除非你想参加一些代码高尔夫比赛,否则我希望你能接受下面的答案。它简单明了——仅仅因为代码可以放在一行中并不能使它变得更好

for i in x: 
    v[i] -= 10

这并不能完全回答这个问题,但除非你想参加一些代码高尔夫比赛,否则我希望你能接受下面的答案。它简单明了——仅仅因为代码可以放在一行中并不能使它变得更好

for i in x: 
    v[i] -= 10

我想下面是你需要的

[v[i]-10 if i in x else v[i] for i in range(len(v))]
[-3, 0, -8, 5, -9]

我想下面是你需要的

[v[i]-10 if i in x else v[i] for i in range(len(v))]
[-3, 0, -8, 5, -9]

也许没有太多的理由在作业的左侧进行列表理解。, 此外,修改赋值运算。但无论如何,我想构造这个。 所以问题是如何通过索引集修改某个元素 在具有列表理解的较长列表中(没有任何列表副本或使用显式循环语句)。 我只能通过使用
exec()
函数“自行编写”代码来实现此解决方案

首先,我展示了一个具有相同值的简单赋值:

现在,我将展示如何根据x集将列表元素减少1(这是我的问题):


也许没有太多的理由在作业的左侧进行列表理解。, 此外,修改赋值运算。但无论如何,我想构造这个。 所以问题是如何通过索引集修改某个元素 在具有列表理解的较长列表中(没有任何列表副本或使用显式循环语句)。 我只能通过使用
exec()
函数“自行编写”代码来实现此解决方案

首先,我展示了一个具有相同值的简单赋值:

现在,我将展示如何根据x集将列表元素减少1(这是我的问题):


仅供参考,
enumerate
是多余的…@deceze谢谢,我更正了它。仅供参考,
enumerate
是多余的…@deceze谢谢,我更正了它。请注意,这更昂贵,因为它迭代较长的
v
,而不是
x
,并且在
x
中重复进行成员资格测试;但这是你为列表理解付出的代价…这并没有改变v中的值,不确定这是否是OP想要的though@Agustin如果您分配回v,则不使用
print
,它做什么wants@AkshayNevrekar我的打印只显示v的新值,但任务将仅修改原始v列表的某些元素。所以问题是,是否有这样的东西:v[expr]=10,其中expr有更多的值,比如一个列表,tuple。那么,在assignment的左侧是否有列表理解功能呢?请注意,这会更昂贵,因为它会迭代较长的
v
,而不是
x
,并在
x
中重复进行成员资格测试;但这是你为列表理解付出的代价…这并没有改变v中的值,不确定这是否是OP想要的though@Agustin如果您分配回v,则不使用
print
,它做什么wants@AkshayNevrekar我的打印只显示v的新值,但任务将仅修改原始v列表的某些元素。所以问题是,是否有这样的东西:v[expr]=10,其中expr有更多的值,比如一个列表,tuple。那么,在一个任务的左边会有一个列表理解吗?我提出这个问题的原因只是好奇列表理解的用法。除此之外,我同意你的看法。我提出这个问题的原因只是好奇,对列表理解的使用。除此之外,我同意你的看法。