我从问卷中得到分数:
list= [1, 2, 2, 4, 1, 4, 1, 3, 2, 2, 2, 1, 1, 1, 4, 3, 4, 2, 1, 1, 1, 1, 1, 2, 2, 2, 4, 1, 4, 1, 2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3, 3]
某些问题需要反向评分。 “ Rscores”是需要反向评分的索引列表,这意味着对于那些分数,如果是1,则需要用4代替,如果是2,则需要用3代替。
Rscores = [1, 6, 11, 16, 21, 28, 33, 38, 43, 49, 57, 8, 46, 2, 7, 12, 17, 22, 25, 35, 40]
我已经尝试过这种方法,并且它有很多变体,但这是行不通的:
for Rscores in list:
if list[Rscores] == 1:
list[Rscores] = 4
elif list[Rscores] == 2:
list[Rscores] = 3
elif list[Rscores] == 3:
list[Rscores] = 2
elif list[Rscores] == 4:
list[Rscores] = 1
如果有人可以提供帮助,我将非常感激。 预先感谢
答案 0 :(得分:1)
这将创建一个新列表,并纠正必要的分数。
lst= [1, 2, 2, 4, 1, 4, 1, 3, 2, 2, 2, 1, 1, 1, 4,
3, 4, 2, 1, 1, 1, 1, 1, 2, 2, 2, 4, 1, 4, 1,
2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3, 3]
Rscores = [1, 6, 11, 16, 21, 28, 33, 38, 43, 49, 57,
8, 46, 2, 7, 12, 17, 22, 25, 35, 40]
rectified_scores = [5-x if i in Rscores else x for i, x in enumerate(lst)]
enumerate
产生一系列对(i,x),其中i
是元素索引,x
是它的值。 5-x if i in Rscores else x
是标准索引的得分,是Rscores
列表中索引的得分的倒数。
我重命名了您的列表,以避免“遮盖” Python类型的名称。如果设置Rscores
,则您的代码运行速度可能会略快一些,但并没有尖叫要进行优化。
答案 1 :(得分:0)
正在工作
list= [1, 2, 2, 4, 1, 4, 1, 3, 2, 2, 2, 1, 1, 1, 4, 3, 4, 2, 1, 1, 1, 1, 1, 2, 2, 2, 4, 1, 4, 1, 2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3, 3]
for n, i in enumerate(list):
if i == 1:
list[n] = 4
if i == 2:
list[n] = 3
if i == 3:
list[n] = 2
if i == 4:
list[n] = 1
print(list)
希望这对您有帮助
答案 2 :(得分:0)
L = [1, 2, 2, 4, 1, 4, 1, 3, 2, 2, 2, 1, 1, 1, 4, 3, 4, 2, 1, 1, 1, 1, 1, 2, 2, 2, 4, 1, 4, 1, 2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3, 3]
Rscores = [1, 6, 11, 16, 21, 28, 33, 38, 43, 49, 57, 8, 46, 2, 7, 12, 17, 22, 25, 35, 40]
def reverseScore(score):
if score == 1:
return 4
elif score == 2:
return 3
elif score == 3:
return 2
elif score == 4:
return 1
def rscoredList(L):
for idx in Rscores:
if idx < len(L):
L[idx] = reverseScore(L[idx])
return L
L = rscoredList(L)
我认为您列出的示例中的一个问题是Rscores
中的索引超出了列表范围。 (57由于不是len(L)==42
而被列为要反向索引的索引。)