繁体   English   中英

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

[英]Python string.split more than one value in for loop

基本上这很好用:

>>> 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

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

拆分为“=”会给出两个值:

"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

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

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

你可以做到

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

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

 x, y = "x"

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM