Я пытаюсь получить доступ к другим частям двухмерного массива во время зацикливания, но не уверен, как именно это делается - PullRequest
0 голосов
/ 21 сентября 2019

Это 2D список, содержащий некоторые значения.Я хочу умножить каждое из значений в списке на 1,1, и если значение равно или превышает 255, то будет выдано сообщение «сгорел».Моя программа в настоящее время просто может получить доступ к первому списку в списке и умножить его значения.Я хочу, чтобы это делалось и для других.Спасибо.

list_ = [[240,10,10,10,10,10,10,240],
         [80,80,240,80,80,240,80,80],
         [80,80,240,80,80,240,80,80],
         [80,80,150,150,150,150,80,80],
         [80,80,240,240,240,240,80,80],
         [80,80,150,150,150,150,80,80],
         [240,240,150,150,150,150,240,240],
         [240,240,150,150,150,150,240,240]]
i = 0
r =0
while i < 8:
    while r < 8:
        list_[i][r] = list_[i][r]*1.1
        if list_[i][r] > 255:
            list_[i][r] = "burnt out"
        print (list_[i][r])
        r += 1
    i += 1

Ответы [ 4 ]

0 голосов
/ 21 сентября 2019

Я бы использовал простой цикл for в этом случае:

for v1 in list_:
    for i2, v2 in enumerate(v1):
        v1[i2] = v2 * 1.1
        if v1[i2] > 255:
            v1[i2] = 'BURN OUT'

Кстати, не используйте зарезервированные слова (list) для имен переменных.

Вывод:

[['BURN OUT', 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 'BURN OUT'],
 [88.0, 88.0, 'BURN OUT', 88.0, 88.0, 'BURN OUT', 88.0, 88.0],
 [88.0, 88.0, 'BURN OUT', 88.0, 88.0, 'BURN OUT', 88.0, 88.0],
 [88.0, 88.0, 165.0, 165.0, 165.0, 165.0, 88.0, 88.0],
 [88.0, 88.0, 'BURN OUT', 'BURN OUT', 'BURN OUT', 'BURN OUT', 88.0, 88.0],
 [88.0, 88.0, 165.0, 165.0, 165.0, 165.0, 88.0, 88.0],
 ['BURN OUT', 'BURN OUT', 165.0, 165.0, 165.0, 165.0, 'BURN OUT', 'BURN OUT'],
 ['BURN OUT', 'BURN OUT', 165.0, 165.0, 165.0, 165.0, 'BURN OUT', 'BURN OUT']]
0 голосов
/ 21 сентября 2019

Вы должны сбросить r = 0 для каждого цикла i

list = [[240,10,10,10,10,10,10,240], 
        [80,80,240,80,80,240,80,80],
        [80,80,240,80,80,240,80,80],
        [80,80,150,150,150,150,80,80],
        [80,80,240,240,240,240,80,80],
        [80,80,150,150,150,150,80,80],
        [240,240,150,150,150,150,240,240],
        [240,240,150,150,150,150,240,240]]
i = 0
while i < 8:
    r = 0  # put inside the loop
    while r < 8:
        list[i][r] = list[i][r]*1.1
        if list[i][r] > 255:
            list[i][r] = "burnt out"
        print (list[i][r])
        r += 1
    i += 1

В вашем коде r = 8 для i> 0

0 голосов
/ 21 сентября 2019

Самый питонский способ сделать это, используя списки и функцию отображения

nlist = [[240, 10, 10, 10, 10, 10, 10, 240],
 [80, 80, 240, 80, 80, 240, 80, 80],
 [80, 80, 240, 80, 80, 240, 80, 80],
 [80, 80, 150, 150, 150, 150, 80, 80],
 [80, 80, 240, 240, 240, 240, 80, 80],
 [80, 80, 150, 150, 150, 150, 80, 80],
 [240, 240, 150, 150, 150, 150, 240, 240],
 [240, 240, 150, 150, 150, 150, 240, 240]]

nlist[:] = [list(map(lambda x: x*1.1 if x*1.1<=255 else 'BURN OUT',sub_list)) for sub_list in nlist]

Вывод:

[['BURN OUT', 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 'BURN OUT'],
 [88.0, 88.0, 'BURN OUT', 88.0, 88.0, 'BURN OUT', 88.0, 88.0],
 [88.0, 88.0, 'BURN OUT', 88.0, 88.0, 'BURN OUT', 88.0, 88.0],
 [88.0, 88.0, 165.0, 165.0, 165.0, 165.0, 88.0, 88.0],
 [88.0, 88.0, 'BURN OUT', 'BURN OUT', 'BURN OUT', 'BURN OUT', 88.0, 88.0],
 [88.0, 88.0, 165.0, 165.0, 165.0, 165.0, 88.0, 88.0],
 ['BURN OUT', 'BURN OUT', 165.0, 165.0, 165.0, 165.0, 'BURN OUT', 'BURN OUT'],
 ['BURN OUT', 'BURN OUT', 165.0, 165.0, 165.0, 165.0, 'BURN OUT', 'BURN OUT']]
0 голосов
/ 21 сентября 2019

Вам нужно будет сбросить значение r до 0 после завершения внутреннего цикла.В противном случае внутренний цикл всегда будет проверять условие с r, установленным на 8, и, следовательно, никогда не будет выполняться снова после первого раза.

Обновленный код:

list = [[240,10,10,10,10,10,10,240],[80,80,240,80,80,240,80,80],[80,80,240,80,80,240,80,80],[80,80,150,150,150,150,80,80],[80,80,240,240,240,240,80,80],[80,80,150,150,150,150,80,80],[240,240,150,150,150,150,240,240],[240,240,150,150,150,150,240,240]]
i = 0
r =0
while i < 8:
    while r < 8:
        list[i][r] = list[i][r]*1.1
        if list[i][r] > 255:
            list[i][r] = "burnt out"
        print (list[i][r])
        r += 1
    i += 1
    r = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...