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

时间:2016-10-21 14:22:22

标签: 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
    l2[:] = list2

但是这个函数没有输出。

这个功能应该这样:

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

我的老师告诉我,函数的最后两行是必要的。

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

6 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

即使更正了您的功能,也无法产生正确的输出。问问自己:我考虑l2[0]多少次?答案:len(l1)次!你想要做的是zip列表一起考虑每个列表的第一个元素,然后是第二个,等等

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]

答案 2 :(得分:1)

你的函数的参数是l1和l2而不是la和lb.你没有放任何return语句。

for e1 in l1:
for e2 in l2:

享受!

答案 3 :(得分:1)

不清楚你想做什么 - 有一个打印的功能或返回的功能或更改的功能现有列表。

如果您想要打印,那么您就错过了:

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语句来查看调用的结果。

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

答案 4 :(得分:1)

正如其他答案所指出的那样,您使用l1l2切换了lalb,并且您应该将该函数传递给先前分配的两个列表而不是列表文字。< / p>

除了你的功能不符合预期之外,你应该用这样的索引遍历列表:

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]

答案 5 :(得分:0)

我在你的代码中看到了一些错误:

insert_enquiry =  """SELECT P_ID,Jobname FROM product_build WHERE Build_number IN (%s);"""
cursor.executemany(insert_enquiry, insert_constraint)

我想它应该是:

for e1 in la:
for e2 in lb: