Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 - Fatal编程技术网

Python 函数不会将项目添加到空列表中

Python 函数不会将项目添加到空列表中,python,python-3.x,Python,Python 3.x,我写了一个函数,但有些东西我搞不懂 def function(l1,l2): list1 = [] list2 = [] for e1 in la: for e2 in lb: if e1 < e2: list1.append(e1) elif e2 < e1: list2.append(e2) l1[:] = list1

我写了一个函数,但有些东西我搞不懂

def function(l1,l2):
    list1 = []
    list2 = []
    for e1 in la:
        for e2 in lb:
            if e1 < e2:
                list1.append(e1)
            elif e2 < e1:
                list2.append(e2)
    l1[:] = list1
    l2[:] = list2
我的老师告诉我函数的最后两行是必要的


我已经尝试返回两个列表或打印它们,但我被告知该函数只需修改给定的列表。

我猜问题如下。在调用函数之前,需要将列表分配给名称,以便在主作用域中实际拥有对列表的引用。在您的示例中,您只需重新定义l1和l2。试试这个:

l1 = [1,2,3]
l2 = [1,2,3]
function(l1, l2)

我发现您的代码中有一些错误:

for e1 in la:
for e2 in lb:
我想应该是:

for e1 in l1:
for e2 in l2:

函数的参数是l1和l2,而不是la和lb。您没有放入任何返回语句

def function(l1,l2):
  list1 = []
  list2 = []
  for e1 in l1:
    for e2 in l2:
        if e1 < e2:
            list1.append(e1)
        elif e2 < e1:
            list2.append(e2)
  l1[:] = list1
  l2[:] = list2
  return l1,l2

享受吧

不清楚您想要做什么-使用打印函数、返回函数或更改现有列表的函数

如果要打印,则缺少一个:

print list1,list2
在末尾,不是复制行而是[:]行。如果要更改给定给函数的列表,则可以执行以下操作:

l1[:]=list1
就地更新列表,因此如果您这样做:

l1=[1,2,3,4,5,6]
l2=[4,5,6,1,2,3]
function(l1,l2)
print l1,l2
你看到结果了。如果不打印,就看不到结果! 最后您可以返回,因此不再使用最后两行:

return list1,list2
因此,您可以:

print function(1,2,3,4,5,6],[4,5,6,1,2,3])
第一个版本的问题是:您在函数中创建了两个列表,但没有对它们执行任何操作。在任何情况下,您都需要一个print语句来查看调用的结果


请注意,您发布了一些编码错误,请检查其他答案。

您的函数即使已更正,也不会产生正确的输出。问问自己:我考虑l2[0]多少次了?回答:1次!你要做的是把列表压缩在一起,同时考虑每个列表的第一个元素,然后考虑第二个,等等。
def keep_lesser(l1, l2):
    la = []
    lb = []
    for a, b in zip(l1, l2):
        if a < b:
            la.append(a)
        elif b < a:
            lb.append(b)
    l1[:] = la
    l2[:] = lb
此函数不返回任何内容,而是对作为输入传递给它的两个列表进行变异或更改

编辑:示例用法

>>first = [1,2,3,4,5,6]
>>second = [4,5,6,1,2,3]
>>keep_lesser(first, second)   <--note how this returns None
>>print(first)
[1, 2, 3]
>>print(second)
[1, 2, 3]

正如其他答案所指出的,您使用la和lb切换了l1和l2,并且您应该传递函数之前分配的两个列表,而不是列表文字

除此之外,您的函数没有达到预期效果,您应该使用如下索引遍历列表:

l1 = [1,2,3,4,5,6]
l2 = [4,5,6,1,2,3]
def function(l1,l2):
    list1 = []
    list2 = []
    for i in range(len(l1)):
        e1 = l1[i]
        e2 = l2[i]
        if e1 < e2:
            list1.append(e1)
        elif e2 < e1:
            list2.append(e2)
    l1[:] = list1
    l2[:] = list2

function(l1,l2)
print l1,l2

你的函数应该做什么?尝试修复缩进。希望没有破坏您的原始版本。您在定义中有错误的名称-它必须是la,lb而不是def function中的l1,l2 la,lb:。你必须创建列表l1,l2在运行函数之前它们甚至可以为空。我的函数应该比较列表中处于相同位置的元素,然后函数删除具有较高值的元素。我可以用字符串给出一个示例:不生成正确的输出。-你是说生产吗@leaf看起来我甚至连“产品”的正确句子都不会如果我写下来:keep_lesser['oana','capri','food'],['too','bologna','tirreno']它不显示修改过的列表,我不知道这个函数为什么修改列表,但不返回它们。将列表分配给变量,然后将这些变量传递给函数。这些函数将更改变量的值。当你调用它的时候,你没有保留对列表的引用,所以在它们改变后你就看不到它们了为什么如果我写函数['capri','milano','genoa'],['roma','linate','torino'],为什么函数不向我显示修改后的列表?因为您正在向函数传递两个列表文本,这两个文本在函数退出后将被丢弃,因为它们没有绑定到任何变量。为了在以后使用它们,你应该给它们指定一个名字,就像我在答案中显示的那样
l1 = [1,2,3,4,5,6]
l2 = [4,5,6,1,2,3]
def function(l1,l2):
    list1 = []
    list2 = []
    for i in range(len(l1)):
        e1 = l1[i]
        e2 = l2[i]
        if e1 < e2:
            list1.append(e1)
        elif e2 < e1:
            list2.append(e2)
    l1[:] = list1
    l2[:] = list2

function(l1,l2)
print l1,l2
[1, 2, 3] [1, 2, 3]