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