我有这样的文本:
text = ["A/abc","B/abd","C/abc","D/xyz"]
我想要的结果是
mylist1 = ["A","C"]
mylist2 = ["B"]
mylist3 = ["D"]
我要找的标签只有“/abc”和“/abd”
现在我所拥有的是:
def searchWord(segment):
word_tag = segment.split('/')
if re.finditer('ab',word_tag[1]):
if re.finditer('abc',word_tag[1]):
letter = word_tag[0]
mylist1 = letter
else:
letter = word_tag[0]
mylist2 = letter
else:
letter = word_tag[0]
mylist3 = letter
return mylist1
return mylist2
return mylist3
mylist1,mylist2,mylist3 = [searchWord(segment) for segment in text]
它似乎运行良好,但抛出了例外:
ValueError: too many values to unpack.
我的“文本”列表相当大,这可能是问题所在吗?在为这个过程构建函数之前,我没有这个问题。
谢谢!
将列表作为元组返回:
Python不执行所有三个
return
语句,只执行第一个。如果您尝试将项目分类,通常会使用字典:
然后,您仍然可以将这三个列表提取为3个变量,但您也可以直接引用bucket。例如,您将引用
mylist1
,而不是buckets['abc']
。只执行第一个
return
。return
返回一个答案,并将控件返回给调用者。之后的任何返回都不会运行。因此,您不会像预期的那样返回三个项目,而只返回mylist的内容(这显然不是一个三个项目列表)。
你想要什么:
您的问题
您确实应该包含完整的堆栈跟踪,但在这种情况下,很容易推断出
mylist1,mylist2,mylist3 = [searchWord(segment) for segment in text]
是有问题的行,因为列表理解返回的值超过3个,所以不能将它们仅分配给3个变量。但代码中的问题是,您试图return
多次。一个函数只能有一个返回,因此应该将其更改为:
解决方案
看了你的代码,看到了你的愿望。我帮你修好了:
运行代码:
另一个解决方案
更强大的解决方案:
行动中:
相关问题 更多 >
编程相关推荐