2016-10-21 2 views
0

Я написал функцию, но есть что-то я не могу понять,Функция не добавлять элементы в пустой список

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] 

Мой учитель сказал мне, что последние две строки в функции необходимы.

Я уже пытался вернуть два списка или распечатать их, но мне сказали, что функция просто должна «изменить» данные списки.

+2

Что ваша функция должна делать? – sytech

+0

Пробовал исправить отступы. Надеюсь, вы не нарушили свою первоначальную версию. – Lafexlos

+1

у вас неправильные имена в definiton - он должен быть 'la, lb' вместо' l1, l2' в 'def function (la, lb):'. И вы должны создавать списки 'l1',' l2' (они могут быть даже пустыми) перед запуском 'function' – furas

ответ

3

Я думаю, проблема в следующем. Перед вызовом функции вам необходимо назначить список именам, чтобы на самом деле у вас есть ссылки на список в основной области. В вашем примере вы просто переопределяете l1 и l2. Попробуйте это:

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

я вижу какую-то ошибку в коде:

for e1 in la: 
for e2 in lb: 

Я предполагаю, что это должно быть:

for e1 in l1: 
for e2 in l2: 
1

Параметры вашей функции являются l1 и l2 не ла и 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 

Наслаждайтесь!

+0

спасибо, я новый парень – acacia

+0

Это классный мужчина;). –

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]) 

Проблема вашей первой версии: вы создали два списка в функции, но ничего не делал с ними. В любом случае вам нужен оператор печати, чтобы увидеть результаты вызова.

Обратите внимание, что вы указали некоторые ошибки кодирования, проверьте другие ответы.

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 

Эта функция ничего не возвращает, но вместо мутирует, или изменения, эти два списка были переданы ему в качестве входных данных.

EDIT: Пример

>>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] 
+0

_ "не выводит правильный результат." _ - Вы имели в виду _produce_? ;) –

+0

@leaf выглядит так, что я не могу даже «товар» правильно сформулировать предложения –

+0

Ну, пока вы держите этот хороший код, мне хорошо. –

1

Как отмечали другие ответы, которые вы перешли l1 и l2 с la и lb и вы должны передать функции два списка ранее назначенную вместо списка литералов.

Другие, чем ваша функция не то, что вы ожидаете, вы должны перебирать списки с индексом, как это:

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] 
+0

почему бы мне wttite – mewtire

+0

, если я напишу функцию (['capri', 'milano', 'genoa'], ['roma', 'linate', 'torino' ]), почему функция не показывает мне измененные списки? – mewtire

+0

Поскольку вы передаете функцию двух литералов списка, которые будут отброшены после выхода из функции, поскольку они не привязаны к какой-либо переменной. Чтобы использовать их впоследствии, вы должны назначить им имя, как показано в ответе – eminescu

Смежные вопросы