Python 为什么函数不返回所需的列表?
我的代码:Python 为什么函数不返回所需的列表?,python,python-3.x,function,return,Python,Python 3.x,Function,Return,我的代码: directions = ["north", "south", "east", "west"] def scan(sentence): global sentence_list sentence_list = [] sentence.split() for i in sentence: if i in directions: a = ('direction', i) sentence_li
directions = ["north", "south", "east", "west"]
def scan(sentence):
global sentence_list
sentence_list = []
sentence.split()
for i in sentence:
if i in directions:
a = ('direction', i)
sentence_list.append(a)
del a
return sentence_list
我试图拆分一个字符串并返回列表中元组中的单词,但每当我使用返回空列表测试它时
以下是我的输出:
PS C:\Users\dell 3521\lpythw\ex48> nosetests
F
======================================================================
FAIL: tests.lexicon_tests.test_directions
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\dell 3521\AppData\Local\Programs\Python\Python36-
32\lib\site-packages\nose-1.3.7-py3.6.egg\nose\case.py
", line 198, in runTest
self.test(*self.arg)
File "C:\Users\dell 3521\lpythw\ex48\tests\lexicon_tests.py", line 5, in
test_directions
assert_equal(lexicon.scan("north"), [('direction', 'north')])
AssertionError: Lists differ: [] != [('direction', 'north')]
Second list contains 1 additional elements.
First extra element 0:
('direction', 'north')
- []
+ [('direction', 'north')]
----------------------------------------------------------------------
Ran 1 test in 0.021s
FAILED (failures=1)
提前感谢。您必须将
语句
重新指定给语句.split()
的返回值,或者直接迭代语句.split()
,因为该方法不会就地修改语句
,而是返回一个列表
您也不需要dela
语句
将代码更改为
directions = ["north", "south", "east", "west"]
def scan(sentence):
global sentence_list
sentence_list = []
for i in sentence.split():
if i in directions:
a = ('direction', i)
sentence_list.append(a)
return sentence_list
或者更简短的方法是使用
输出是
>>> scan("north")
[('direction', 'north')]
您可能希望在代码中对global
语句的使用进行仔细考虑。
如中所述,为了代码的可读性和可维护性,您希望避免使用全局变量。str.split()。您应该将返回值str.split()
分配给一个变量,或者在这种情况下,您可以简单地对其进行迭代:
sentence_list = []
for i in sentence.split():
请正确缩进您的代码-
句子。split()
不会就地修改句子。您应该尝试在句子中为i使用。split():
它是在源文件中使用的,但我在发布问题后忘记缩进代码帖子。现在已更正。不要使用全局,dela
,i
对一个词来说是个坏名字。sential=sential.split()
是多余的<代码>用于句子中的i。split():
就足够了谢谢你的回答。这是有帮助的,但我试着,正如你所建议的,删除dela,它起了作用。不过,元组不是应该是不变的吗?是的,当然是。但每次在循环中调用a=('direction',i)
时,都会创建一个新的元组。另一方面,尝试更改a的元素,如a[1]=“north”
将导致TypeError:“tuple”对象不支持项分配
sentence_list = []
for i in sentence.split():