为什么我能';在python for循环中不能用两个变量获得两个值?
我有以下疑问 第一个代码:为什么我能';在python for循环中不能用两个变量获得两个值?,python,for-loop,Python,For Loop,我有以下疑问 第一个代码: x= 'ab' y = 'cd' z = 'ef' for i,j in x,y : print (i,j) >>> Output : a b c d 变量‘i’是:ac,变量‘j’是:bd 第二个代码: x= 'ab' y = 'cd' z = 'ef' for i,j in x,y,z: print (i,j) >>> Output : a b c d
x= 'ab'
y = 'cd'
z = 'ef'
for i,j in x,y :
print (i,j)
>>> Output : a b
c d
变量‘i’是:ac,变量‘j’是:bd
第二个代码:
x= 'ab'
y = 'cd'
z = 'ef'
for i,j in x,y,z:
print (i,j)
>>> Output : a b
c d
e f
变量“i”是:ace,变量“j”:bdf
。等等
现在看看这个:
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
我很困惑。你可以试试这样的东西:
x='ab'
y='cd'
z='ef'
对于[元组(x)]中的(i,j):
打印(i,j)
问题是“in x”作为字符串在字符串中迭代。第一次迭代返回a
;第二个返回b
。每个字符都是“没有足够的值来解包”。简单地
你想干什么就干什么。注意,在其他循环中,您迭代了字符串的元组;这与遍历单个字符串不同。这是因为循环2项i,j中给出了您 现在试试这个:
x= 'ab'
y = 'cd'
z = 'ef'
for i in x :
print (i)
在第一段代码中,您迭代字符串的元组
(x,y)
(您没有编写括号,但逗号构成元组,而不是括号)
因此,它归结为:
for two_letters_string in (x, y):
...
在这里您要做的第二件事是:使用元组(i,j)
作为变量,而不是两个字母\u字符串。因此,Python将解压这两个字母字符串,第一个字母以i
结尾,第二个字母以j
结尾
在第二段代码中也会发生同样的情况。您只需要再进行一个循环,并在一个字符串上进行迭代
最后一段代码非常不同:您不迭代字符串的元组,而是迭代由2个字符组成的字符串。对字符串进行迭代会对其字符进行迭代,因此它将在第一个循环中生成'a'
,在第二个循环中生成'b'
。但是您尝试将这一个字符串解压为两个变量i
和j
,这是不可能的
请注意,这是有效的:
x = 'ab'
for i, j in x, : # Note the comma after x!
print (i, j)
# a b
因为x
后面的逗号创建了一个项目的元组。您的情况与前两种情况相同,但这里只有一个循环。尝试[x]中的i,j:print(i,j)
Ach!是的,问题在于字符串迭代,而不是解包。删除评论。谢谢,@MichaelButscherYeah。我知道。问题是为什么我可以通过两个变量得到:ab,cd。ab,cd,ef。等等但不仅仅是:阿布沃。非常有用。所以我们可以说一个字符串(无论大小,都被视为“仅一个元素”)谢谢。所以这两个变量不会在一个字符串上迭代。非常有用。
x = 'ab'
for i, j in x, : # Note the comma after x!
print (i, j)
# a b