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

我的代码部分是:

v=[7,2,5,1]               # list with any numbers
x={2,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,-8,-9]

我的问题是如何用列表理解或其他更紧凑的表达式替换上述for循环? 注意:打印内​​容仅显示v的新值 但任务是仅修改原始v列表的某些元素。

rickylf2lee 回答:如何在赋值运算符的左侧使用列表理解?

这并不能完全回答问题,但是除非您正在尝试参加一些代码高尔夫球比赛,否则我希望您能遵循以下内容。这很简单明了-仅因为代码可以放在一行中并不能使其变得更好。

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

我认为您需要:

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

输出:

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

可能没有太多理由在作业op。的左侧进行列表理解, 此外,修改分配操作。但是尽管如此,我还是想构建这个。 所以问题是我如何通过索引集修改某些元素 在具有列表理解的较长列表中(没有任何列表副本或使用显式cycle语句)。 我只能使用exec()函数通过“自写”代码来实现此解决方案。

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

# Let the index set and the "long" list be:
>>> x={0,2,4}
>>> v=[0]*10
>>> str(tuple("v["+str(i)+"]" for i in x))+"="+str(len(x)*(1,))
"('v[0]','v[2]','v[4]')=(1,1,1)"
# So I needed to change ("'" to "") at the left side before I could execute it.
>>> str(tuple("v["+str(i)+"]" for i in x)).replace("'","")+"="+str(len(x)*(1,))
'(v[0],v[2],v[4])=(1,1)'

# Put it into `exec()` function.
>>> exec(str(tuple("v["+str(i)+"]" for i in x)).replace("'",)))
>>> v
[1,0]

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

>>> s1=str(tuple("v["+str(i)+"]-=1" for i in x))
>>> s1
"('v[0]-=1','v[2]-=1','v[4]-=1')"
# Now I used the REG module for more efficient character replacement.
>>> import re as r
>>> r.sub(r"\(|\)|'","",s1).replace(",",";")
v[0]-=1; v[2]-=1; v[4]-=1'

# Now put them together:
>>> exec(r.sub(r"\(|\)|'",str(tuple("v["+str(i)+"]-=1" for i in  x))).replace(",";"))
>>> v
[-1,-1,0]   # if v was 10*[0]
,

您可以尝试列表理解:

SELECT A.[AGE],A.[SALARY],A.[GENDER],A.[DATEOBIRTH],A.[CITY],B.[TEST1],C.[TEST2]
FROM [tbl_PR_AGE_VALIDATION_RULE] AS A
LEFT JOIN [tbl_PR_PAGE_VALIDATION_RULE] AS B ON B.ENTITY_ID = A.ENTITY_ID
LEFT JOIN [tbl_PR_CITY_VALIDATION] AS C ON C.ENTITY_ID = B.ENTITY_ID
,

我认为以下是您需要的

[v[i]-10 if i in x else v[i] for i in range(len(v))]
[-3,-9]
本文链接:https://www.f2er.com/3103378.html

大家都在问