#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
l2[:] = list2
но эта функция не дает мне никаких выходных данных.
Эта функция должна действовать следующим образом:
function([1,2,3,4,5,6],[4,5,6,1,2,3])
l1 = [1,2,3]
l2 = [1,2,3]
Мой учитель сказал мне, что последние две строки в функции необходимы.
Я уже пытался вернуть два списка или распечатать их, но мне сказали, что функция просто должна «модифицировать» данные списки.
Комментарии:
1. Что должна делать ваша функция?
2. Пытался исправить отступ. Надеюсь, это не нарушило вашу первоначальную версию.
3. у вас неправильные имена в definiton — это должно быть
la, lb
вместоl1, l2
вdef function(la, lb):
. И вам нужно создать спискиl1
,l2
(они могут быть даже пустыми) перед запускомfunction
4. предполагается, что моя функция сравнивает элементы списков, которые находятся в одной и той же позиции, затем функция удаляет элемент с более высоким значением.
5. я могу привести пример со строками:
Ответ №1:
Я предполагаю, что проблема заключается в следующем. Вам нужно присвоить список именам перед вызовом функции, чтобы у вас действительно были ссылки на список в вашей основной области. В вашем примере вы просто переопределяете l1
и l2
. Попробуй это:
l1 = [1,2,3]
l2 = [1,2,3]
function(l1, l2)
Ответ №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]
Комментарии:
1. «выдает неверный вывод». — Вы имели в виду производить ? 😉
2. @leaf похоже, я даже не могу исправить предложения ‘product’
3. если я запишу это:
4. keep_lesser([‘oana’, ‘capri’,’food’], [‘too’, ‘bologna’, ‘tirreno’]) не показывает измененные списки, я не знаю почему
5. Эта функция изменяет списки, но не возвращает их. Присвоите списки переменным, затем передайте эти переменные в функцию. Функции изменят значение переменных. Когда вы вызываете ее, вы не сохраняете ссылки на списки, поэтому вы не можете видеть их после того, как они изменились
Ответ №3:
Параметрами вашей функции являются l1 и l2, а не la и lb. Вы не ввели никакого оператора return.
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
Наслаждайтесь!
Ответ №4:
Неясно, что вы хотите сделать — иметь функцию, которая печатает, или функцию, которая возвращает, или функцию, которая изменяет существующие списки.
Если вы хотите напечатать, то вам не хватает:
print list1,list2
в конце вместо строк копирования ( [:]
lines). Если вы хотите изменить списки, предоставленные функции, то то, что вы сделали, прекрасно:
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, чтобы увидеть результаты вызова.
Обратите внимание, что вы опубликовали некоторые ошибки кодирования, проверьте другие ответы.
Ответ №5:
Как указано в других ответах, вы переключили 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]
Комментарии:
1. почему, если я хочу
2. если я напишу функцию ([‘capri’, ‘milano’, ‘genoa’], [‘roma’, ‘linate’, ‘torino’]) , почему функция не показывает мне измененные списки?
3. Потому что вы передаете функции два литерала списка, которые будут отброшены после завершения работы функции, поскольку они не привязаны ни к какой переменной. Чтобы использовать их впоследствии, вы должны присвоить им имя, подобное тому, которое я показал в ответе
Ответ №6:
Я вижу какую-то ошибку в вашем коде:
for e1 in la:
for e2 in lb:
Я думаю, это должно быть:
for e1 in l1:
for e2 in l2: