#python #list
#python #Список
Вопрос:
Я знаю, что в Python есть встроенные функции списка, но мне любопытно, как можно написать функцию для суммирования списка и функцию для обратного списка. Я смог выяснить, как написать некоторые другие функции списка ( sort
, count
index
и т.д.), Но не эти, и я полагаю, что некоторые другие языки не имеют этих встроенных функций.
Может ли кто-нибудь показать мне какой-нибудь код на Python для этих 2 функций, не используя никаких других встроенных функций?
Комментарии:
1. не было бы ничего плохого, если бы это было домашнее задание. Это просто означает, что ответы должны быть более пояснительными и менее ориентированными на решение. Что вы пробовали? Где вы застряли? С какой конкретной проблемой вы столкнулись?
2. Тем не менее, поскольку это звучит точно так же, как «сделай за меня мою домашнюю работу», я бы предпочел помочь кому-нибудь с их домашней работой, если бы они сказали: «Да, это домашнее задание», но также подумали о том, чтобы попытаться составить сумму типов списков.
3. Уоррен, я не лгу об этих вещах, я уже достаточно взрослый, чтобы понять ценность выполнения своей собственной работы, я просто ожидаю, что когда я перейду на другие языки (я специализируюсь на математике, поэтому я не буду брать никаких уроков за пределами этого вступления с python). Чтобы было больше кривой обучения, поэтому я хотел бы видеть как можно больше кода, который я могу понять сейчас. Я понимаю, почему вы были бы подозрительны, хотя
Ответ №1:
Для суммирования списка вы можете сделать:
sum([1, 2, 3, 4])
И для изменения списка, это вернет новый, обратный список с использованием фрагментов Python:
[1, 2, 3, 4][::-1]
Теперь, если вы не хотите использовать встроенные функции:
def sum(lst):
s = 0
for e in lst:
s = e
return s
def reverse(lst):
l = []
for e in lst:
l = [e] l
return l
Комментарии:
1. Разве суть вопроса не в том, чтобы выполнить это без использования встроенных функций?
2. Извините, я поторопился с ответом. Я отредактировал свой ответ в соответствии с тем, что ожидает OP, не хотите ли пересмотреть downvote?
3. ваш
reverse()
находитсяO(N**2)
иO(N)
в пространстве. Это можно сделать за O (N) шагов и в постоянном пространстве (inplace) . Вы могли бы добавить код к своему ответу, если он вам нравится.4. Я не перешел по ссылке J.F, но я бы определенно сделал это скорее,
for index in range(len(list) / 2): lst[index], lst[-index-1] = lst[-index-1], lst[index]
если вы делаете это на месте, илиfor index in range(len(lst) - 1): l.append(lst[-index-1])
если вы этого не делаете. (В этом коде могут быть отдельные ошибки, не проверял)5. @agf: мой код такой же, как ваш первый фрагмент, за исключением того, что я использую
//
(пример выполняется на Python3) иn-1-i
индексирую вместо-index-1
. Второй фрагмент неверен, вы могли бы записать его как:L = [lst[i] for i in xrange(len(lst)-1, -1, -1)]
Ответ №2:
Суммируем список
Прямо из руководства по Python:
>>> def sum(seq):
... def add(x,y): return x y
... return reduce(add, seq, 0)
>>> sum(range(1, 11))
55
>>> sum([])
0
Это можно было бы сделать как однострочный (… иш), используя lambda
(синтаксис анонимной функции Python):
def sum(seq):
return reduce(lambda x, y: x y, seq, 0)
Не хотите использовать reduce
?
def sum(seq):
total = 0
for s in seq:
total = s
return total
Комментарии:
1. Спасибо, Мэтт, я не думал, что руководство было таким полезным, я такой новичок