Python - замена конкретных номеров в списке - PullRequest
0 голосов
/ 26 октября 2018

У меня есть баллы из анкеты:

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

Если кто-то может помочь, я был бы очень благодарен.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

работает; 1001 *

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)

Надеюсь, это поможет полный

enter image description here

0 голосов
/ 26 октября 2018
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.)

0 голосов
/ 26 октября 2018

Создается новый список с исправлением необходимых баллов.

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 был набором, но он не кричит об оптимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...