我写了一个函数,但有些东西我无法弄清楚
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]
我的老师告诉我,函数的最后两行是必要的。
我已经尝试返回两个列表或打印它们,但我被告知该函数只需要“修改”给定列表。
答案 0 :(得分:3)
我猜问题如下。您需要在调用函数之前将列表分配给名称,以便您实际拥有对主范围中列表的引用。在您的示例中,您只需重新定义l1
和l2
。试试这个:
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)
正如其他答案所指出的那样,您使用l1
和l2
切换了la
和lb
,并且您应该将该函数传递给先前分配的两个列表而不是列表文字。< / 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: