Python string.split for循环中有多个值

时间:2011-02-18 16:59:58

标签: python string split

基本上这很好用:

>>> x,y = "x=y".split("=")
>>> print x
x

但这会产生错误:

>>> for x, y in "x=y".split("="):
...     print x
...

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

我想知道区别是什么,以及如何解决这个问题。

4 个答案:

答案 0 :(得分:10)

拆分“=”会给你两个值:

"x", "y"

这些值与您的变量名匹配的事实是偶然的。你也可以这样做:

x,xx = "x=y".split("=")

我怀疑你可能计划的是列出一个清单:

"foo=bar,blah=boo,etc=something"

分开它,你可以做到:

for x,y in [ (pair.split("=")) for pair in "foo=bar,blah=boo,etc=something".split(",") ]:
    print x,y

BUT!虽然它有效,但我认为将它分成单独的步骤要好得多,因为它更具可读性:

params = "foo=bar,blah=boo,etc=something"
pair_list = params.split(",")
for pair in pair_list:
    x,y = pair.split("=")
    ...

答案 1 :(得分:2)

你可以做到

for x in "x=y".split("="):
    # ...

您尝试迭代序列["x", "y"],但为序列的每个条目分配x, y。这相当于

 x, y = "x"

第一次迭代,没有任何意义。

答案 2 :(得分:1)

我不确定你为什么要这样做,但如果由于某种原因你想为此使用for循环:

>>> for x, y in ["x=y".split("=")]:
...   print x
...   print y
... 
x
y

答案 3 :(得分:0)

因为split函数返回一个列表。在for循环的上下文中,它一次获得一个项目。例如:'k=y'.split('=')返回包含['k', 'y']的列表。因为它在for循环中你得到'k',然后'y'。

它在for循环之外工作的原因是因为它在for循环中一次看到整个列表而不是一个项目,并且能够解压缩它。

要修复它,您可以将数据拆分为for循环外的元组列表,然后循环执行。例如:[('x', 'y'), ...]