#python #for-loop
#python #for-цикл
Вопрос:
У меня есть следующие сомнения
Первый код:
x= 'ab'
y = 'cd'
z = 'ef'
for i,j in x,y :
print (i,j)
>>> Output : a b
c d
Переменная ‘i’ — это: a c , а переменная ‘j’ — это: b d
Второй код:
x= 'ab'
y = 'cd'
z = 'ef'
for i,j in x,y,z:
print (i,j)
>>> Output : a b
c d
e f
Переменная ‘i’: a c e, а переменная ‘j’: b d f
. . и так далее.
Теперь посмотрите на это:
x= 'ab'
y = 'cd'
z = 'ef'
for i,j in x :
print (i,j)
>>> Output : error not enough values to unpack
Почему я не могу получить: a b , где :
Переменная ‘i’: a, а переменная ‘j’: b
Я очень смущен.
Комментарии:
1. Попробуйте
for i,j in [x] : print (i,j)
Ответ №1:
Проблема в том, что «in x» перебирает строку в виде строки. Первая итерация возвращает a
; вторая возвращает b
. Каждый отдельный символ — это «недостаточно значений для распаковки». Просто
i, j = x
работает так, как вы хотите. Обратите внимание, что в других циклах вы перебирали кортеж строк; это не то же самое, что перебирать одну строку.
Ответ №2:
В первом фрагменте кода вы выполняете итерацию по кортежу строк (x, y)
(вы не написали круглые скобки, но запятая создает кортеж, а не круглые скобки).
Итак, это сводится к:
for two_letters_string in (x, y):
...
Здесь вы делаете вторую вещь: вместо two_letters_string
этого вы использовали кортеж (i, j)
в качестве переменной. Итак, Python распакует строку из двух букв, и первая буква заканчивается in i
, вторая in j
.
То же самое происходит во втором фрагменте кода. У вас просто есть еще один цикл и повторите еще одну строку.
Последний фрагмент кода сильно отличается: вы выполняете итерацию не по кортежу строк, а по строке, состоящей из 2 символов. Итерация по строке повторяет ее символы, поэтому она приведет 'a'
к первому циклу и 'b'
ко второму. Но вы пытаетесь распаковать эти односимвольные строки в две переменные i
и j
, что невозможно.
Обратите внимание, что это работает:
x = 'ab'
for i, j in x, : # Note the comma after x!
print (i, j)
# a b
поскольку запятая после x
создает кортеж из одного элемента. Вы находитесь в той же ситуации, что и в первых двух случаях, но здесь только один цикл.
Ответ №3:
это происходит потому, что в цикле вам заданы 2 элемента i, j
попробуйте это сейчас:
x= 'ab'
y = 'cd'
z = 'ef'
for i in x :
print (i)
Ответ №4:
Вы можете попробовать что-то вроде этого:
x = 'ab'
y = 'cd'
z = 'ef'
i, j = x
print(i, j)
Комментарии:
1. Нет необходимости оборачивать строку в кортеж и список. Итерация по одному элементу списка, который является кортежем итерируемого, бессмысленна. Просто используйте
i, j = x
без дополнительных слоев.