Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么函数不返回所需的列表?_Python_Python 3.x_Function_Return - Fatal编程技术网

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():