Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我能';在python for循环中不能用两个变量获得两个值?_Python_For Loop - Fatal编程技术网

为什么我能';在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