Для цикла с двумя индексами?

#python

#python

Вопрос:

Что делает цикл for с двумя индексами?

Например

 for a, b in c:
  

Что делает этот оператор?

Комментарии:

1. Это зависит от используемой вами структуры данных.

Ответ №1:

Если c является итеративным объектом, который содержит элементы, которые можно распаковать, то вы можете использовать две переменные для выполнения цикла через c. Для примера рассмотрим приведенный ниже —

 c = [(1,2),(3,4)];

for a,b in c: 
    print(a,b)
  

ВЫВОД :

 1 2
3 4
  

Здесь мы использовали две переменные, которые являются ничем иным, как распакованными элементами из elements of c . Вы можете использовать его в таких случаях, когда вы хотите одновременно получить доступ к внутренним элементам элемента, как в примере.


ПРИМЕЧАНИЕ:

Вы должны быть уверены, что все элементы в вашем iterable согласованы по своим размерам. Например, приведенный выше пример не сработал бы, если в c есть элементы, подобные —

 c = [[1,1],[1,2],[3]];
  

Приведенная выше строка приведет к ошибке со словами —

 ValueError: not enough values to unpack (expected 2, got 1)
  

Таким же образом, описанный выше подход может быть расширен для использования более двух подобных —

 c = [[1,2,3], [4,5,6], [7,8,[1,2,3]]];

for a,b,d in c: 
    print(a,b,d)
  

ВЫВОД :

 1 2 3
4 5 6
7 8 [1, 2, 3]
  

ВАРИАНТЫ ИСПОЛЬЗОВАНИЯ —

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

     c = {'a':1, 'b':2, 'c':3};
    
    for key,value in c.items(): 
        print(key,value)
      

    ВЫВОД :

     a 1
    b 2
    c 3
      

  1. Это также используется, когда мы используем zip() в python для перебора нескольких переменных одновременно, но нам нужно получить доступ к значениям одновременно как —

     l1 = [1,2,3];
    l2 = [4,5,6];
    
    for list1,list2 in zip(l1,l2): 
        print(list1, list2)
      

    ВЫВОД :

     1 4
    2 5
    3 6
      

Ответ №2:

Вы можете использовать этот стиль для перебора словаря или списка кортежей, или списка списков, а также Пример:

 my_list = [{1, 2}, {3, 4}]
for a, b in my_list:
    print (a, b)
  

Приведенный выше цикл выдаст вывод в виде:

 1 2
3 4
  

Комментарии:

1. Вы уверены, что хотели использовать { ? Я помню, что наборы не сохраняют порядок, но я не уверен.

Ответ №3:

Если у вас есть список кортежей

 [(0,1), (0, 2), (5,3)]
  

Вы можете выполнить цикл по этому:

 for i, j in my_list:
    print("i", i, "j", j)
  

В результате

 i 0 j 1
i 0 j 2
i 5 j 3
  

Ответ №4:

c может быть кортежем, а a, b распаковывает кортеж в 2 переменные.

 c = [(5, 7), (5, 8)]
for a, b in c:
   print(a , b)

5 7
5 8
  

Комментарии:

1. Почему говорят, что c может быть кортежем, а затем не делают его кортежем?