Цикл по 2d массиву Python - PullRequest
       27

Цикл по 2d массиву Python

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

Я немного озадачен чем-то, я зацикливался на 2d-массиве, просто экспериментируя, когда придумал этот код:

result = [["Lucas","5"],["Tim","2"]]
count = 0
for line in result:
    for item in result[count]:
        print(item)
        count = count + 1

Я думал, что это даст мне результат Lucas, а затем 2, поскольку он будет переходить к первому элементу, затем второй цикл for будет проходить по подсписку, печатая result[0][0], однако, как только он попадет к первому элементу подсписка, он будетувеличьте счетчик до 1, означая, что он выведет result[1][1] далее, так как он находится в новой области видимости, но цикл затем переходит ко второму элементу любой области видимости, в которой он находится.

Однако, это даст «Lucas», «5» в качестве вывода.Я думал, что когда я изменяю счет, я думал, что я изменяю область, через которую он проходит.

Пожалуйста, объясните мне, почему я не прав

Заранее спасибо, и извиняюсь за то, что нетобъясняя это очень хорошо.

Ответы [ 4 ]

1 голос
/ 25 сентября 2019

Когда вы делаете

for item in result[count]:

, выражение result[count] вычисляется только один раз, в начале цикла.Он не оценивается каждый раз в цикле, поэтому переназначение count не влияет на последующие итерации.Это примерно эквивалентно:

temp = result[count]
for item in temp:

Помните, что значение, по которому вы перебираете for, может быть выражением генератора.Они не могут быть проиндексированы, они просто вычисляют ряд значений.Поэтому не имеет смысла переоценивать их каждый раз.

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

Если вы настаиваете на использовании циклов for, вы также можете использовать

result = [["Lucas","5"],["Tim","2"]]
count = 0
for line in range(len(result)):
    for item in result[line]:
        print(item)
        count = count + 1

return: Lucas 5 Tim 2

0 голосов
/ 25 сентября 2019
for line in result:

будет циклически проходить по массивам верхнего уровня, поэтому здесь есть 2 записи: ["Lucas","5"] и ["Tim","2"] Затем:

for item in result[count]:

будет циклически проходить через каждый элемент для каждой из 2 записей., поэтому

print(item)

отобразит 4 элемента в порядке Lucas, 5, Tim, 2.

Счет не нужен, здесь он не нужен, и не используется ни одним издля петель в любом случае.

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

Нет необходимости в переменной count.result[count] дает вам первый элемент, потому что вы установили count = 0, так что вы действительно просто просматриваете ["Lucas", "5"] во внутреннем цикле.Вы можете просто использовать две for...in петли

result = [["Lucas","5"],["Tim","2"]]
count = 0
for line in result:
    for item in line:
        print(item)
...