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]